diff options
| -rw-r--r-- | challenge-056/mark-anderson/raku/ch-2.p6 | 30 |
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); |
