diff options
| -rw-r--r-- | challenge-002/matt-latusek/README | 1 | ||||
| -rwxr-xr-x | challenge-002/matt-latusek/perl5/ch-1.sh | 1 | ||||
| -rwxr-xr-x | challenge-002/matt-latusek/perl5/ch-2.pl | 37 |
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" ); +} |
