diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-01-26 20:57:51 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-26 20:57:51 +0000 |
| commit | 7597dad2783b511f4cc2ce28f08e772d54326a9f (patch) | |
| tree | 939b7090c3a563d9efdd02d4f6dd14f5c5e27fa7 | |
| parent | d257c07d79654d0d36a512cf5c976cf71b1a90da (diff) | |
| parent | a9a1857a1d5cf014ae23b04996884ed0c200b6e9 (diff) | |
| download | perlweeklychallenge-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/README | 9 | ||||
| -rwxr-xr-x | challenge-044/ruben-westerberg/perl/ch-1.pl | 41 | ||||
| -rwxr-xr-x | challenge-044/ruben-westerberg/perl/ch-2.pl | 24 | ||||
| -rwxr-xr-x | challenge-044/ruben-westerberg/raku/ch-1.p6 | 14 | ||||
| -rwxr-xr-x | challenge-044/ruben-westerberg/raku/ch-2.p6 | 23 |
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; +} |
