aboutsummaryrefslogtreecommitdiff
path: root/challenge-002
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2019-04-05 00:53:00 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2019-04-05 00:53:00 +0100
commita8c3d2b2017671959c0a97fc6ea4fb21e5bce396 (patch)
tree579a5e3f4dda2afc569169891456e7147b9bf996 /challenge-002
parent11b76c27c49a032c48c5c79571a5e33b8da3b732 (diff)
downloadperlweeklychallenge-club-a8c3d2b2017671959c0a97fc6ea4fb21e5bce396.tar.gz
perlweeklychallenge-club-a8c3d2b2017671959c0a97fc6ea4fb21e5bce396.tar.bz2
perlweeklychallenge-club-a8c3d2b2017671959c0a97fc6ea4fb21e5bce396.zip
- Added solution by Matt Latusek.
Diffstat (limited to 'challenge-002')
-rw-r--r--challenge-002/matt-latusek/README1
-rwxr-xr-xchallenge-002/matt-latusek/perl5/ch-1.sh1
-rwxr-xr-xchallenge-002/matt-latusek/perl5/ch-2.pl37
3 files changed, 39 insertions, 0 deletions
diff --git a/challenge-002/matt-latusek/README b/challenge-002/matt-latusek/README
new file mode 100644
index 0000000000..e1dc8b6e16
--- /dev/null
+++ b/challenge-002/matt-latusek/README
@@ -0,0 +1 @@
+Solution by Matt Latusek.
diff --git a/challenge-002/matt-latusek/perl5/ch-1.sh b/challenge-002/matt-latusek/perl5/ch-1.sh
new file mode 100755
index 0000000000..7741175edf
--- /dev/null
+++ b/challenge-002/matt-latusek/perl5/ch-1.sh
@@ -0,0 +1 @@
+perl -lpe '$_ = ord($_^v45) ? $_*1 : $_'
diff --git a/challenge-002/matt-latusek/perl5/ch-2.pl b/challenge-002/matt-latusek/perl5/ch-2.pl
new file mode 100755
index 0000000000..fe586e76bd
--- /dev/null
+++ b/challenge-002/matt-latusek/perl5/ch-2.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use Scalar::Util 'looks_like_number';
+
+my $bi = shift // 10;
+die "Invalid input base '$bi'.\n"
+ unless looks_like_number($bi)
+ and $bi > 1
+ and $bi < 37;
+my $bo = shift // 35;
+die "Invalid output base '$bo'.\n"
+ unless looks_like_number($bo)
+ and $bo > 1
+ and $bo < 37;
+
+my $i = 0;
+my @digits = ( 0 .. 9, 'A' .. 'Z' );
+my %digits = map { $_ => $i++ } @digits;
+
+while ( readline() ) {
+ chomp;
+ my ( $i, $o, $n, $b ) = ( uc($_), '', 0, 1 );
+ while ( length $i ) {
+ $i =~ s/^(.*?)\s*(.)$/$1/;
+ die "Invalid digit '$2'.\n"
+ unless exists $digits{$2} and $digits{$2} < $bi;
+ $n += $b * $digits{$2};
+ $b *= $bi;
+ }
+ while ($n) {
+ $o .= $digits[ $n % $bo ];
+ $n = int( $n / $bo );
+ }
+ print( ( length $o ? reverse $o : '0' ) . "\n" );
+}