diff options
| -rwxr-xr-x | challenge-056/ruben-westerberg/perl/ch-2.pl | 67 | ||||
| -rwxr-xr-x | challenge-056/ruben-westerberg/raku/ch-2.raku | 58 |
2 files changed, 125 insertions, 0 deletions
diff --git a/challenge-056/ruben-westerberg/perl/ch-2.pl b/challenge-056/ruben-westerberg/perl/ch-2.pl new file mode 100755 index 0000000000..ecfe010a5f --- /dev/null +++ b/challenge-056/ruben-westerberg/perl/ch-2.pl @@ -0,0 +1,67 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +use feature ":all"; +no warnings "experimental"; + + +my $tree={ + v=>5, + l=>{ + v=>4, + l=>{ + v=>11, + l=>{ + v=>7 + }, + r=>{ + v=>2 + } + }, + }, + r=>{ + v=>8, + l=>{ + v=>13, + }, + r=>{ + v=>9, + r=>{ + v=>1 + } + } + } +}; + +my $target=$ARGV[0]//22; + +my @stack=($tree); + +while (@stack) { + given (shift @stack) { + for my $k (qw<l r>) { + if (exists $_->{$k}) { + $_->{$k}{p}=$_; + push @stack, $_->{$k}; + } + } + + if ((! exists $_->{l}) and (! exists $_->{r})) { + my $p=$_; + my @path; + my $sum=0; + while (defined $p) { + push @path, $p->{v}; + $sum+=$p->{v}; + $p=$p->{p}; + + } + if ($sum==$target) { + say join "->", reverse @path; + + } + } + + } +} diff --git a/challenge-056/ruben-westerberg/raku/ch-2.raku b/challenge-056/ruben-westerberg/raku/ch-2.raku new file mode 100755 index 0000000000..c2bf69fc3a --- /dev/null +++ b/challenge-056/ruben-westerberg/raku/ch-2.raku @@ -0,0 +1,58 @@ +#!/usr/bin/env raku + +my $tree={ + v=>5, + l=>{ + v=>4, + l=>{ + v=>11, + l=>{ + v=>7 + }, + r=>{ + v=>2 + } + }, + }, + r=>{ + v=>8, + l=>{ + v=>13, + }, + r=>{ + v=>9, + r=>{ + v=>1 + } + } + } +}; + +my $target=@*ARGS[0]//22; +#look for left nodes +my @stack=($tree); + + +while (@stack) { + + given @stack.shift { + for qw<l r> -> $k { + if .{$k}:exists { + .{$k}<p>=$_; + @stack.push: .{$k}; + } + } + if none(.{qw<l r>}:exists) { + my $p=$_; + #my $sum=$p<v>; + my @path; + while $p.defined { + @path.push: $p<v>; + $p=$p<p>; + } + if @path.sum == $target { + put @path.reverse.join: "->"; + } + } + } +} |
