aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-01-26 20:57:51 +0000
committerGitHub <noreply@github.com>2020-01-26 20:57:51 +0000
commit7597dad2783b511f4cc2ce28f08e772d54326a9f (patch)
tree939b7090c3a563d9efdd02d4f6dd14f5c5e27fa7
parentd257c07d79654d0d36a512cf5c976cf71b1a90da (diff)
parenta9a1857a1d5cf014ae23b04996884ed0c200b6e9 (diff)
downloadperlweeklychallenge-club-7597dad2783b511f4cc2ce28f08e772d54326a9f.tar.gz
perlweeklychallenge-club-7597dad2783b511f4cc2ce28f08e772d54326a9f.tar.bz2
perlweeklychallenge-club-7597dad2783b511f4cc2ce28f08e772d54326a9f.zip
Merge pull request #1168 from drclaw1394/master
ruben's solutions for w44. ch-1 and ch-2. perl and raku
-rw-r--r--challenge-044/ruben-westerberg/README9
-rwxr-xr-xchallenge-044/ruben-westerberg/perl/ch-1.pl41
-rwxr-xr-xchallenge-044/ruben-westerberg/perl/ch-2.pl24
-rwxr-xr-xchallenge-044/ruben-westerberg/raku/ch-1.p614
-rwxr-xr-xchallenge-044/ruben-westerberg/raku/ch-2.p623
5 files changed, 106 insertions, 5 deletions
diff --git a/challenge-044/ruben-westerberg/README b/challenge-044/ruben-westerberg/README
index 755a56c1f6..05d4a09b2d 100644
--- a/challenge-044/ruben-westerberg/README
+++ b/challenge-044/ruben-westerberg/README
@@ -2,14 +2,13 @@ Solution by Ruben Westerberg
perl/ch-1.sh and raku/ch-1.sh
===================
-Solves the Coloured Ring problem with Gauss-Jordan Elimiation. Solves the system based on error from 11 in each ring.
-Run the program to display the solution.
+Breaks the string 123456789 into terms which are added or subtracted to sum to 100
+Run the program to show all combinations
ch-2.pl and ch-2.p6
===================
-Lists Self Describing Numbers for a given base. Pauses for 1 second when found. Diplays a list of found numbers at the end of search.
-
-Default base is 4. Optionally provide a single command line argument to specifiy the base to use.
+Finds the smallest number of moves to (add 1, or double) to accumulate 1 into 200;
+Run the program to show sequence of moves
diff --git a/challenge-044/ruben-westerberg/perl/ch-1.pl b/challenge-044/ruben-westerberg/perl/ch-1.pl
new file mode 100755
index 0000000000..6205370fbd
--- /dev/null
+++ b/challenge-044/ruben-westerberg/perl/ch-1.pl
@@ -0,0 +1,41 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Data::Dumper;
+use v5.26;
+
+my $string="123456789";
+print "Input string to split and combine to 100: $string\n";
+my @digits=split "",$string;
+my $i=0;
+my $limit=baseToDec(3,"100000000");
+while ($i<$limit) {
+ my $num=sprintf "%08s0",decToBase(3,$i++);
+ my @ops=map {tr/120/+-/d;$_} split "",$num;
+ my $exp= join "",map {$digits[$_],$ops[$_]} 0..8;
+ my $sum=eval $exp;
+ print "sum: $sum from: $exp\n" if $sum==100;
+}
+
+#base conversion from last weeks challange
+sub baseToDec {
+ my ($base,$value)=@_;
+ my $sum=0;
+ for (reverse split "", $value) {
+ state $i=0;
+ $sum+=$base**$i++*$_;
+ }
+ $sum;
+}
+sub decToBase {
+ my ($base, $dec)=@_;
+ return "0" if $dec==0;
+ my $rem;
+ my $result="";
+ while ($dec) {
+ $rem=$dec%$base;
+ $result.=$rem<=9?$rem:chr(55+$rem);
+ $dec=int $dec/$base;
+ }
+ scalar reverse($result);
+}
diff --git a/challenge-044/ruben-westerberg/perl/ch-2.pl b/challenge-044/ruben-westerberg/perl/ch-2.pl
new file mode 100755
index 0000000000..95e4503e7a
--- /dev/null
+++ b/challenge-044/ruben-westerberg/perl/ch-2.pl
@@ -0,0 +1,24 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+my $target=200;
+my @moves;
+my $d=$target;
+while ($d!=1) {
+ if ($d%2==0) {
+ push @moves, "Double";
+ $d/=2;
+ }
+ else {
+ push @moves, "Add 1";
+ $d-=1;
+ }
+}
+my $t=1;
+printf "Start: \t\t%3d\n",$t;
+for (reverse @moves) {
+ $t+=1 if /^A/;
+ $t*=2 if /^D/;
+ printf "Move:\t%s:\t%3d\n",$_, $t;
+}
diff --git a/challenge-044/ruben-westerberg/raku/ch-1.p6 b/challenge-044/ruben-westerberg/raku/ch-1.p6
new file mode 100755
index 0000000000..1bf8b00256
--- /dev/null
+++ b/challenge-044/ruben-westerberg/raku/ch-1.p6
@@ -0,0 +1,14 @@
+#!/usr/bin/env perl6
+use MONKEY-SEE-NO-EVAL;
+my $string="123456789";
+put "Input string to split and combine to 100: $string";
+my @digits=$string.comb;
+my $i=0;
+my $limit="100000000".parse-base(3);
+for $i..$limit {
+ my $num= .base(3).fmt("%08s0");
+ my $exp=(@digits Z $num.comb.map({TR:d/120/+-/.Str;})).flat.join: "";
+ my $sum=EVAL $exp;
+ put "sum: $sum from $exp" if $sum==100;
+}
+
diff --git a/challenge-044/ruben-westerberg/raku/ch-2.p6 b/challenge-044/ruben-westerberg/raku/ch-2.p6
new file mode 100755
index 0000000000..1055313db9
--- /dev/null
+++ b/challenge-044/ruben-westerberg/raku/ch-2.p6
@@ -0,0 +1,23 @@
+#!/usr/bin/env perl6
+
+my $target=200;
+my @moves;
+my $d=$target;
+while $d != 1 {
+ if $d %% 2 {
+ @moves.push("Double");
+ $d/=2;
+ }
+ else {
+ @moves.push("Add 1");
+ $d-=1;
+ }
+
+}
+my $t=1;
+printf "Start: \t\t%3d\n",$t;
+for @moves.reverse {
+ $t+=1 when /^A/;
+ $t*=2 when /^D/;
+ printf "Move:\t%s:\t%3d\n",$_, $t;
+}