aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@frontrangerunner.com>2020-04-19 18:17:57 -0600
committerMark Anderson <mark@frontrangerunner.com>2020-04-19 18:17:57 -0600
commitddd09bb2eab9b82fad66a1df6d72d7385e897010 (patch)
treea48b8c30d14ca54f7478164dc0745d033075f492
parent7c0d91eac24ee1f024fd63baa8d79f042621a7ee (diff)
downloadperlweeklychallenge-club-ddd09bb2eab9b82fad66a1df6d72d7385e897010.tar.gz
perlweeklychallenge-club-ddd09bb2eab9b82fad66a1df6d72d7385e897010.tar.bz2
perlweeklychallenge-club-ddd09bb2eab9b82fad66a1df6d72d7385e897010.zip
ch-2.p6 again
-rw-r--r--challenge-056/mark-anderson/raku/ch-2.p630
1 files changed, 10 insertions, 20 deletions
diff --git a/challenge-056/mark-anderson/raku/ch-2.p6 b/challenge-056/mark-anderson/raku/ch-2.p6
index b0859436e2..a8d76eed2e 100644
--- a/challenge-056/mark-anderson/raku/ch-2.p6
+++ b/challenge-056/mark-anderson/raku/ch-2.p6
@@ -1,41 +1,31 @@
#!/usr/bin/env raku
class node {
- has UInt $.value;
- has node $.left is rw;
- has node $.right is rw;
- has node $.parent is rw;
+ has UInt $.value;
+ has Array $.parents is rw;
+ has node $.left is rw;
+ has node $.right is rw;
}
sub traverse($node) {
+ my @parents = [$node.value, |$node.parents];
+
if $node.left {
- $node.left.parent = $node;
+ $node.left.parents = @parents;
traverse($node.left);
}
if $node.right {
- $node.right.parent = $node;
+ $node.right.parents = @parents;
traverse($node.right);
}
unless $node.left or $node.right {
- sum_path($node);
- }
-}
-
-sub sum_path($node is copy) {
- my @path;
-
- loop {
- @path.push($node.value);
- last unless $node.parent;
- $node = $node.parent;
+ say @parents.reverse.join(" -> ") ~ " == 22" if @parents.sum == 22;
}
-
- say @path.reverse.join(" -> ") ~ " == 22" if @path.sum == 22;
}
-my $root = node.new(value => 5, parent => Nil);
+my $root = node.new(value => 5, parents => []);
$root.left = node.new(value => 4);
$root.right = node.new(value => 8);