aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-05-18 10:25:26 +0100
committerGitHub <noreply@github.com>2021-05-18 10:25:26 +0100
commit30144af81e48e661184e2c60766f17b56b314421 (patch)
tree0d8ac61ef26f300f0464483ec8fd13274ec3611c
parent5b26df6511449ebb59d221cf9250002d454cddc7 (diff)
parentc7c524a029527a84df1c1fe004ee0eabf542a537 (diff)
downloadperlweeklychallenge-club-30144af81e48e661184e2c60766f17b56b314421.tar.gz
perlweeklychallenge-club-30144af81e48e661184e2c60766f17b56b314421.tar.bz2
perlweeklychallenge-club-30144af81e48e661184e2c60766f17b56b314421.zip
Merge pull request #4106 from Kaiepi/challenge-113
Add Ben Davies' solutions for challenge 113
-rw-r--r--challenge-113/ben-davies/raku/ch-01.raku4
-rw-r--r--challenge-113/ben-davies/raku/ch-02.raku42
2 files changed, 46 insertions, 0 deletions
diff --git a/challenge-113/ben-davies/raku/ch-01.raku b/challenge-113/ben-davies/raku/ch-01.raku
new file mode 100644
index 0000000000..5a70ca0745
--- /dev/null
+++ b/challenge-113/ben-davies/raku/ch-01.raku
@@ -0,0 +1,4 @@
+use v6;
+unit sub MAIN(IntStr:D $n where 1..*, IntStr:D $d where 1..9) {
+ say Int(+$n ∈ (1..$n).grep({ m/$d/ }).combinations».sum);
+}
diff --git a/challenge-113/ben-davies/raku/ch-02.raku b/challenge-113/ben-davies/raku/ch-02.raku
new file mode 100644
index 0000000000..c747e68ffc
--- /dev/null
+++ b/challenge-113/ben-davies/raku/ch-02.raku
@@ -0,0 +1,42 @@
+use v6;
+
+role BTree[::T] {
+ has T $.value is required;
+ has ::?CLASS:_ $.left = $?CLASS;
+ has ::?CLASS:_ $.right = $?CLASS;
+
+ method new(::?ROLE:_: T $value, ::?CLASS:_ :L($left) = $?CLASS, ::?CLASS:_ :R($right) = $?CLASS --> ::?ROLE:D) {
+ self.bless: :$value, :$left, :$right
+ }
+
+ multi method CALL-ME(::?ROLE:U: |args --> ::?ROLE:D) {
+ self.new: |args
+ }
+
+ multi method sum(::?ROLE:U: --> 0) { }
+ multi method sum(::?ROLE:D: --> Int:D) { $!value + $!left.sum + $!right.sum }
+
+ multi method map(::?ROLE:U: &f --> ::?ROLE:U) { self }
+ multi method map(::?ROLE:D: &f --> ::?ROLE:D) { self.new: f($!value), L => $!left.map(&f), R => $!right.map(&f) }
+
+ multi method gist(::?ROLE:D: Int:D :$level = 0 --> Str:D) {
+ my Str:D $margin = ' ' x $level * 2;
+ join $?NL,
+ $!value.gist,
+ ($margin ~ "L $!left.gist(level => $level + 1)" with $!left),
+ ($margin ~ "R $!right.gist(level => $level + 1)" with $!right)
+ }
+}
+
+my constant BIT = BTree[Int:D].^pun;
+
+unit sub MAIN() {
+ my BIT:D $bit = BIT(1,
+ L => BIT(2,
+ L => BIT(4,
+ R => BIT(7))),
+ R => BIT(3,
+ L => BIT(5),
+ R => BIT(6)));
+ say $bit.map: $bit.sum - *;
+}