diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-05-23 21:31:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-23 21:31:53 +0100 |
| commit | 589626853b921daf57b4e5c4ab09c93b44e67086 (patch) | |
| tree | 7d990fcec9360538f02b06d5bc13fc421e22f753 /challenge-113 | |
| parent | 4782f92eb901e6c30d5dab4b415369924c7ff821 (diff) | |
| parent | 6b27128f6836e292c513c1998e15d39fa9c939ae (diff) | |
| download | perlweeklychallenge-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.raku | 16 | ||||
| -rw-r--r-- | challenge-113/polettix/raku/ch-2.raku | 45 |
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)); |
