aboutsummaryrefslogtreecommitdiff
path: root/challenge-043
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2020-01-18 20:52:14 +1000
committerRuben Westerberg <drclaw@mac.com>2020-01-18 20:52:14 +1000
commitd42f0d677ff89901cfaf5503643d40b8b4deaa55 (patch)
tree6c6c9fe585bcd70fc096de9e482f64e7b3c802b5 /challenge-043
parent4a6924c5c1caf8d199f5d1b287eebaef924bdb98 (diff)
downloadperlweeklychallenge-club-d42f0d677ff89901cfaf5503643d40b8b4deaa55.tar.gz
perlweeklychallenge-club-d42f0d677ff89901cfaf5503643d40b8b4deaa55.tar.bz2
perlweeklychallenge-club-d42f0d677ff89901cfaf5503643d40b8b4deaa55.zip
added ch-2.pl
Diffstat (limited to 'challenge-043')
-rwxr-xr-xchallenge-043/ruben-westerberg/perl/ch-2.pl60
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;
+}