diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-01-20 21:02:29 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-20 21:02:29 +0000 |
| commit | f51b453e6cb6dbd63e128c6501bcf0568c356354 (patch) | |
| tree | a0fec3b01cc97faa2e05bc7f554519d23bdf420d | |
| parent | 131ed495f59f6423b5ebb38fc2aad9455a37939e (diff) | |
| parent | b9068d41c0f9d046062405296566dd26d3e3fe75 (diff) | |
| download | perlweeklychallenge-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-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++; } |
