aboutsummaryrefslogtreecommitdiff
path: root/challenge-043
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2020-01-21 05:51:33 +1000
committerRuben Westerberg <drclaw@mac.com>2020-01-21 05:51:33 +1000
commit391ee8c2cea795def2e7de40794d8e4684c94a00 (patch)
treeb2efb57ca7b6092c547b2ef622ba334613034a6b /challenge-043
parentc340947a1edb8f329633174b2796995c7752b5b5 (diff)
downloadperlweeklychallenge-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-xchallenge-043/ruben-westerberg/raku/ch-2.p636
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++;
}