diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-04-26 21:22:42 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-26 21:22:42 +0100 |
| commit | 7069be5749837a40eaed3808831fa6110790642b (patch) | |
| tree | a3c8ab47a1860b56630aab961920a0192e242b51 | |
| parent | ecb3443824f6065d0d357b8b9f131b264c19b941 (diff) | |
| parent | 53e402b12f5cef9842689099ac7303eedc0a87fd (diff) | |
| download | perlweeklychallenge-club-7069be5749837a40eaed3808831fa6110790642b.tar.gz perlweeklychallenge-club-7069be5749837a40eaed3808831fa6110790642b.tar.bz2 perlweeklychallenge-club-7069be5749837a40eaed3808831fa6110790642b.zip | |
Merge pull request #1636 from drclaw1394/master
ruben's solutions for w56 and w57 ch-1 and ch-2. perl and raku
| -rw-r--r-- | challenge-056/ruben-westerberg/README | 7 | ||||
| -rwxr-xr-x | challenge-056/ruben-westerberg/perl/ch-1.pl | 22 | ||||
| -rwxr-xr-x | challenge-056/ruben-westerberg/perl/ch-2.pl | 67 | ||||
| -rwxr-xr-x | challenge-056/ruben-westerberg/raku/ch-1.raku | 19 | ||||
| -rwxr-xr-x | challenge-056/ruben-westerberg/raku/ch-2.raku | 58 | ||||
| -rw-r--r-- | challenge-057/ruben-westerberg/README | 7 | ||||
| -rwxr-xr-x | challenge-057/ruben-westerberg/perl/ch-1.pl | 46 | ||||
| -rwxr-xr-x | challenge-057/ruben-westerberg/perl/ch-2.pl | 23 | ||||
| -rwxr-xr-x | challenge-057/ruben-westerberg/raku/ch-1.raku | 40 | ||||
| -rwxr-xr-x | challenge-057/ruben-westerberg/raku/ch-2.raku | 14 |
10 files changed, 293 insertions, 10 deletions
diff --git a/challenge-056/ruben-westerberg/README b/challenge-056/ruben-westerberg/README index 1d82ee775f..cc07c584e6 100644 --- a/challenge-056/ruben-westerberg/README +++ b/challenge-056/ruben-westerberg/README @@ -2,11 +2,8 @@ Solution by Ruben Westerberg ch-1.pl and ch-1.raku =================== -Flip binary -Run program to find largest number of 1's in binary number, after a select sub set has been flipped. Accepts 1 optional argument, which is is the number of digits in the (random) number to test. -3 is the default - +Prints indexes of an array with values have a specified difference ch-2.pl and ch-2.raku =================== -Computes all the wave arrays for a given integer array. Accepts a single arbument which is the size of the array. Default is 4 +Prints the path of a tree, which values sum to a specified target value diff --git a/challenge-056/ruben-westerberg/perl/ch-1.pl b/challenge-056/ruben-westerberg/perl/ch-1.pl new file mode 100755 index 0000000000..fdeb71c629 --- /dev/null +++ b/challenge-056/ruben-westerberg/perl/ch-1.pl @@ -0,0 +1,22 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use feature ":all"; +no warnings "experimental"; +my $max=10; +my @N= sort map { int rand $max } 1..$max; +my $k=2; + +say "Input Array:"; +say join ", ", @N; + +my @results; + +for (my $i=0; $i<@N; $i++) { + for (my $j=0; $j<@N; $j++) { + push @results,[$i,$j] if $N[$i]-$N[$j] == $k and $i != $j; + } +} +say "Index pairs for difference of $k:"; +printf("%d, %d\n",$_->[0],$_->[1]) for @results; + 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-1.raku b/challenge-056/ruben-westerberg/raku/ch-1.raku new file mode 100755 index 0000000000..90fa1bbc3e --- /dev/null +++ b/challenge-056/ruben-westerberg/raku/ch-1.raku @@ -0,0 +1,19 @@ +#!/usr/bin/env raku + +my $max=10; +my @N= $max.rand().Int xx $max; #sort map { int rand $max } 1..$max; +my $k=2; + +say "Input Array:"; +put @N.join: ", "; + +my @results; + +loop (my $i=0; $i < @N; $i++) { + loop (my $j=0; $j < @N; $j++) { + @results.push: [$i,$j] if @N[$i]-@N[$j] == $k and $i != $j; + } +} +put "Index pairs for difference of $k:"; +printf("%d, %d\n",$_[0],$_[1]) for @results; + 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: "->"; + } + } + } +} diff --git a/challenge-057/ruben-westerberg/README b/challenge-057/ruben-westerberg/README index 1d82ee775f..f5785b52b9 100644 --- a/challenge-057/ruben-westerberg/README +++ b/challenge-057/ruben-westerberg/README @@ -2,11 +2,8 @@ Solution by Ruben Westerberg ch-1.pl and ch-1.raku =================== -Flip binary -Run program to find largest number of 1's in binary number, after a select sub set has been flipped. Accepts 1 optional argument, which is is the number of digits in the (random) number to test. -3 is the default - +Inverts a a binary tree. No pretty print though.... :( ch-2.pl and ch-2.raku =================== -Computes all the wave arrays for a given integer array. Accepts a single arbument which is the size of the array. Default is 4 +Finds the shortest unique prefix from a list of words diff --git a/challenge-057/ruben-westerberg/perl/ch-1.pl b/challenge-057/ruben-westerberg/perl/ch-1.pl new file mode 100755 index 0000000000..d950e6f5de --- /dev/null +++ b/challenge-057/ruben-westerberg/perl/ch-1.pl @@ -0,0 +1,46 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +use feature ":all"; +no warnings "experimental"; + + +my $tree={ + v=>1, + l=>{ + v=>2, + l=>{ + v=>4 + }, + r=>{ + v=>5 + } + }, + r=>{ + v=>3, + l=>{ + v=>6 + }, + r=>{ + v=>7 + } + } +}; + + +my @stack=($tree); + +while (@stack) { + given (shift @stack) { + my @keys=keys %$_; + if ( "l" ~~ @keys and "r" ~~ @keys) { + my $t=$_->{l}; + $_->{l}=$_->{r}; + $_->{r}=$t; + push @stack, $_->{l}; + push @stack, $_->{r}; + } + } +} + diff --git a/challenge-057/ruben-westerberg/perl/ch-2.pl b/challenge-057/ruben-westerberg/perl/ch-2.pl new file mode 100755 index 0000000000..ee3c4b7718 --- /dev/null +++ b/challenge-057/ruben-westerberg/perl/ch-2.pl @@ -0,0 +1,23 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +use feature ":all"; +no warnings "experimental"; + + +my @words= qw<alphabet book carpet cadmium cadeau alpine>; + +my @shortest= +map { + my $prefix; + for my $i (0..length($_) -1) { + $prefix= substr $_,0, $i; + last if 1 == grep {$prefix eq $_} map { substr $_, 0, $i} @words; + } + $prefix; + +} +@words; + +say join ", ",@shortest; diff --git a/challenge-057/ruben-westerberg/raku/ch-1.raku b/challenge-057/ruben-westerberg/raku/ch-1.raku new file mode 100755 index 0000000000..3f8a9dbda5 --- /dev/null +++ b/challenge-057/ruben-westerberg/raku/ch-1.raku @@ -0,0 +1,40 @@ +#!/usr/bin/env raku + +my $tree={ + v=>1, + l=>{ + v=>2, + l=>{ + v=>4 + }, + r=>{ + v=>5 + } + }, + r=>{ + v=>3, + l=>{ + v=>6 + }, + r=>{ + v=>7 + } + } +}; + + +my @stack=($tree); + +while @stack { + given (@stack.shift) { + if all .{<l r>}:exists { + my $t=.<l>; + .<l>=.<r>; + .<r>=$t; + @stack.push: .<l>; + @stack.push: .<r>; + say $_; + } + } +} + diff --git a/challenge-057/ruben-westerberg/raku/ch-2.raku b/challenge-057/ruben-westerberg/raku/ch-2.raku new file mode 100755 index 0000000000..5dd7ee2705 --- /dev/null +++ b/challenge-057/ruben-westerberg/raku/ch-2.raku @@ -0,0 +1,14 @@ +#!/usr/bin/env raku + +my @words= <alphabet book carpet cadmium cadeau alpine>; + +my @shortest=@words.map({ + my $prefix; + for (0.. .chars-1) -> $i { + $prefix= .substr(0,$i); + last if $prefix eq one @words.map({ .substr(0,$i)}); + } + $prefix; +}); + +say @shortest; |
