diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2020-01-21 05:51:33 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2020-01-21 05:51:33 +1000 |
| commit | 391ee8c2cea795def2e7de40794d8e4684c94a00 (patch) | |
| tree | b2efb57ca7b6092c547b2ef622ba334613034a6b /challenge-043 | |
| parent | c340947a1edb8f329633174b2796995c7752b5b5 (diff) | |
| download | perlweeklychallenge-club-391ee8c2cea795def2e7de40794d8e4684c94a00.tar.gz perlweeklychallenge-club-391ee8c2cea795def2e7de40794d8e4684c94a00.tar.bz2 perlweeklychallenge-club-391ee8c2cea795def2e7de40794d8e4684c94a00.zip | |
Updated solution to use raku built in base handling
Just needed to look a little deeper!
Diffstat (limited to 'challenge-043')
| -rwxr-xr-x | challenge-043/ruben-westerberg/raku/ch-2.p6 | 36 |
1 files 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++; } |
