From 398d0a5e1a1ae4e66258f6260f5176c55fff59f4 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Sun, 26 Jan 2020 14:46:59 +1000 Subject: Added ch-1.pl and ch-1.p6 --- challenge-044/ruben-westerberg/perl/ch-1.pl | 41 +++++++++++++++++++++++++++++ challenge-044/ruben-westerberg/raku/ch-1.p6 | 14 ++++++++++ 2 files changed, 55 insertions(+) create mode 100755 challenge-044/ruben-westerberg/perl/ch-1.pl create mode 100755 challenge-044/ruben-westerberg/raku/ch-1.p6 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/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; +} + -- cgit From a9a1857a1d5cf014ae23b04996884ed0c200b6e9 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Sun, 26 Jan 2020 15:12:41 +1000 Subject: Added ch-2.pl and ch-2.p6 --- challenge-044/ruben-westerberg/README | 9 ++++----- challenge-044/ruben-westerberg/perl/ch-2.pl | 24 ++++++++++++++++++++++++ challenge-044/ruben-westerberg/raku/ch-2.p6 | 23 +++++++++++++++++++++++ 3 files changed, 51 insertions(+), 5 deletions(-) create mode 100755 challenge-044/ruben-westerberg/perl/ch-2.pl create mode 100755 challenge-044/ruben-westerberg/raku/ch-2.p6 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-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-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; +} -- cgit