aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2020-04-27 05:08:16 +1000
committerRuben Westerberg <drclaw@mac.com>2020-04-27 05:08:16 +1000
commit3a439d23306ce2176c718a21415954d538035957 (patch)
tree958cff0c21346f1a60cd74fbf4746ff548d7cb4d
parentc189952ed0d765ae4487ea34e545020c914a6e19 (diff)
downloadperlweeklychallenge-club-3a439d23306ce2176c718a21415954d538035957.tar.gz
perlweeklychallenge-club-3a439d23306ce2176c718a21415954d538035957.tar.bz2
perlweeklychallenge-club-3a439d23306ce2176c718a21415954d538035957.zip
Added w56 ch-2 perl and raku
-rwxr-xr-xchallenge-056/ruben-westerberg/perl/ch-2.pl67
-rwxr-xr-xchallenge-056/ruben-westerberg/raku/ch-2.raku58
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: "->";
+ }
+ }
+ }
+}