aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-01-20 21:02:29 +0000
committerGitHub <noreply@github.com>2020-01-20 21:02:29 +0000
commitf51b453e6cb6dbd63e128c6501bcf0568c356354 (patch)
treea0fec3b01cc97faa2e05bc7f554519d23bdf420d
parent131ed495f59f6423b5ebb38fc2aad9455a37939e (diff)
parentb9068d41c0f9d046062405296566dd26d3e3fe75 (diff)
downloadperlweeklychallenge-club-f51b453e6cb6dbd63e128c6501bcf0568c356354.tar.gz
perlweeklychallenge-club-f51b453e6cb6dbd63e128c6501bcf0568c356354.tar.bz2
perlweeklychallenge-club-f51b453e6cb6dbd63e128c6501bcf0568c356354.zip
Merge pull request #1154 from drclaw1394/master
Updated solution W43 ch-2.p6 to use Raku built in base handling
-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++;
}