diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2020-04-27 05:08:16 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2020-04-27 05:08:16 +1000 |
| commit | 3a439d23306ce2176c718a21415954d538035957 (patch) | |
| tree | 958cff0c21346f1a60cd74fbf4746ff548d7cb4d | |
| parent | c189952ed0d765ae4487ea34e545020c914a6e19 (diff) | |
| download | perlweeklychallenge-club-3a439d23306ce2176c718a21415954d538035957.tar.gz perlweeklychallenge-club-3a439d23306ce2176c718a21415954d538035957.tar.bz2 perlweeklychallenge-club-3a439d23306ce2176c718a21415954d538035957.zip | |
Added w56 ch-2 perl and raku
| -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: "->"; + } + } + } +} |
