aboutsummaryrefslogtreecommitdiff
path: root/challenge-113
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-05-23 21:31:53 +0100
committerGitHub <noreply@github.com>2021-05-23 21:31:53 +0100
commit589626853b921daf57b4e5c4ab09c93b44e67086 (patch)
tree7d990fcec9360538f02b06d5bc13fc421e22f753 /challenge-113
parent4782f92eb901e6c30d5dab4b415369924c7ff821 (diff)
parent6b27128f6836e292c513c1998e15d39fa9c939ae (diff)
downloadperlweeklychallenge-club-589626853b921daf57b4e5c4ab09c93b44e67086.tar.gz
perlweeklychallenge-club-589626853b921daf57b4e5c4ab09c93b44e67086.tar.bz2
perlweeklychallenge-club-589626853b921daf57b4e5c4ab09c93b44e67086.zip
Merge pull request #4124 from polettix/polettix/pwc113-1
Add polettix's solutions for Raku
Diffstat (limited to 'challenge-113')
-rw-r--r--challenge-113/polettix/raku/ch-1.raku16
-rw-r--r--challenge-113/polettix/raku/ch-2.raku45
2 files changed, 61 insertions, 0 deletions
diff --git a/challenge-113/polettix/raku/ch-1.raku b/challenge-113/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..7f0591c401
--- /dev/null
+++ b/challenge-113/polettix/raku/ch-1.raku
@@ -0,0 +1,16 @@
+#!/usr/bin/env raku
+use v6;
+
+sub represent-integer (Int $n is copy, Int $d) {
+ return 0 if $n < $d;
+ return 1 if $n >= 10 * $d;
+ return 1 if $n ~~ m{$d};
+ $n -= $d;
+ while $n > 0 {
+ return 1 if represent-integer($n, $d);
+ $n -= 10;
+ }
+ return 0;
+}
+
+sub MAIN ($N = 25, $D = 7) { represent-integer($N, $D).say }
diff --git a/challenge-113/polettix/raku/ch-2.raku b/challenge-113/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..7b51166551
--- /dev/null
+++ b/challenge-113/polettix/raku/ch-2.raku
@@ -0,0 +1,45 @@
+#!/usr/bin/env raku
+use v6;
+
+sub recreate-binary-tree ($tree is rw) {
+ my $sum = 0;
+ sub accumulate ($n) { $sum += $n<value> };
+ sub update ($n) { $n<value> = $sum - $n<value> };
+ for &accumulate, &update -> $cb {
+ my @queue = $tree,;
+ while (@queue) {
+ my $node = @queue.shift // next;
+ $cb($node);
+ next unless $node<children>:exists;
+ @queue.push($node<children>.Slip);
+ }
+ }
+ return $tree;
+}
+
+sub node ($value is copy, $left = Nil, $right = Nil) {
+ my $pleft = $left.gist;
+ my $pright = $right.gist;
+ my $retval = { value => $value };
+ $retval<children> = $left.defined || $right.defined
+ ?? ($left, $right) !! ();
+ return $retval;
+}
+
+sub printout ($root, $indent = 0) {
+ my $value = $root.defined ?? $root<value> !! '';
+ say ' ' x $indent, "<$value>";
+ return unless $root;
+ printout($_, $indent + 1) for $root<children>.all;
+}
+
+# 1
+# / \
+# 2 3
+# / / \
+# 4 5 6
+# \
+# 7
+my $T =
+ node(1, node(2, node(4, Nil, node(7))), node(3, node(5), node(6)));
+printout(recreate-binary-tree($T));