From 391ee8c2cea795def2e7de40794d8e4684c94a00 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Tue, 21 Jan 2020 05:51:33 +1000 Subject: Updated solution to use raku built in base handling Just needed to look a little deeper! --- challenge-043/ruben-westerberg/raku/ch-2.p6 | 36 +++++------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/challenge-043/ruben-westerberg/raku/ch-2.p6 b/challenge-043/ruben-westerberg/raku/ch-2.p6 index 3b3d6f6168..6fe5caa108 100755 --- a/challenge-043/ruben-westerberg/raku/ch-2.p6 +++ b/challenge-043/ruben-westerberg/raku/ch-2.p6 @@ -1,8 +1,8 @@ #!/usr/bin/env perl6 -my $base=@*ARGS[0]||4; -my $i=baseToDec($base,"1"~"0"x($base-1)); -my $num=decToBase($base,$i); +my $base=(@*ARGS[0]||4).Int; +my $i=("1"~"0"x($base-1)).parse-base($base); +my $num=$i.base($base); my @found; my $run=True; signal(SIGINT).tap({say "Stopping search"; $run=False;}); @@ -18,37 +18,13 @@ while ($run) { put "NO: $num"; } $i++; - $num=decToBase($base,$i); + $num=$i.base($base); last if $num.chars > $base; } say "Found Self Describing Numbers:"; say $_ for @found; - - -sub baseToDec ($base,$value) { - my $sum=0; - for $value.comb.reverse { - state $i=0; - $sum+=$base**$i++*$_; - } - $sum; -} - -sub decToBase ($base,$decIn) { - return "0" if $decIn==0; - my $dec=$decIn; - my $rem; - my $result=""; - while $dec { - $rem=$dec%$base; - $result~=$rem <= 9??$rem!!chr(55+$rem); - $dec=Int($dec/$base); - } - $result.flip; -} - sub test ($base,$nString) { return False if $nString.chars != $base; my $res=1; @@ -56,8 +32,8 @@ sub test ($base,$nString) { my $i=0; for @digits -> $d { my $count=@digits.grep({$_ eq $i}); - my $bcount=decToBase($base,$count); - $res&&=(decToBase($base,$count) eq $d); + my $bcount=$count.Int.base($base); + $res&&=($count.Int.base($base) eq $d); last unless $res; $i++; } -- cgit