aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-04-26 21:22:42 +0100
committerGitHub <noreply@github.com>2020-04-26 21:22:42 +0100
commit7069be5749837a40eaed3808831fa6110790642b (patch)
treea3c8ab47a1860b56630aab961920a0192e242b51
parentecb3443824f6065d0d357b8b9f131b264c19b941 (diff)
parent53e402b12f5cef9842689099ac7303eedc0a87fd (diff)
downloadperlweeklychallenge-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/README7
-rwxr-xr-xchallenge-056/ruben-westerberg/perl/ch-1.pl22
-rwxr-xr-xchallenge-056/ruben-westerberg/perl/ch-2.pl67
-rwxr-xr-xchallenge-056/ruben-westerberg/raku/ch-1.raku19
-rwxr-xr-xchallenge-056/ruben-westerberg/raku/ch-2.raku58
-rw-r--r--challenge-057/ruben-westerberg/README7
-rwxr-xr-xchallenge-057/ruben-westerberg/perl/ch-1.pl46
-rwxr-xr-xchallenge-057/ruben-westerberg/perl/ch-2.pl23
-rwxr-xr-xchallenge-057/ruben-westerberg/raku/ch-1.raku40
-rwxr-xr-xchallenge-057/ruben-westerberg/raku/ch-2.raku14
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;