diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2020-01-18 20:52:14 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2020-01-18 20:52:14 +1000 |
| commit | d42f0d677ff89901cfaf5503643d40b8b4deaa55 (patch) | |
| tree | 6c6c9fe585bcd70fc096de9e482f64e7b3c802b5 /challenge-043 | |
| parent | 4a6924c5c1caf8d199f5d1b287eebaef924bdb98 (diff) | |
| download | perlweeklychallenge-club-d42f0d677ff89901cfaf5503643d40b8b4deaa55.tar.gz perlweeklychallenge-club-d42f0d677ff89901cfaf5503643d40b8b4deaa55.tar.bz2 perlweeklychallenge-club-d42f0d677ff89901cfaf5503643d40b8b4deaa55.zip | |
added ch-2.pl
Diffstat (limited to 'challenge-043')
| -rwxr-xr-x | challenge-043/ruben-westerberg/perl/ch-2.pl | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/challenge-043/ruben-westerberg/perl/ch-2.pl b/challenge-043/ruben-westerberg/perl/ch-2.pl new file mode 100755 index 0000000000..a101717949 --- /dev/null +++ b/challenge-043/ruben-westerberg/perl/ch-2.pl @@ -0,0 +1,60 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use v5.26; + +my $base=$ARGV[0]||4; +my $i=baseToDec($base,"1"."0"x($base-1));#6210001000; +my $num=decToBase($base,$i); + +while (length $num <= $base) { + my $res=test($base,$num); + if ($res) { + print "***OK: $num***\n"; + sleep 1; + } + else { + print "NO: $num\n"; + } + $i++; + $num=decToBase($base,$i); +} + +sub baseToDec { + my ($base,$value)=@_; + my $sum=0; + for (reverse split "", $value) { + state $i=0; + $sum+=$base**$i++*$_; + } + $sum; +} +sub decToBase { + my ($base, $dec)=@_; + return "0" if $dec==0; + my $rem; + my $result=""; + while ($dec) { + $rem=$dec%$base; + $result.=$rem<=9?$rem:chr(55+$rem); + $dec=int $dec/$base; + } + scalar reverse($result); +} + +sub test { + my ($base,$nString)=@_; + return undef if length($nString) != $base; + my $res=1; + my @digits=split "", $nString; + my $i=0; + for my $d(@digits) { + my $count=scalar grep({$_ eq $i} @digits); + my $bcount=decToBase($base,$count); + $res&&=(decToBase($base,$count) eq $d); + last unless $res; + $i++; + } + $res; +} |
