diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-04-05 00:53:00 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-04-05 00:53:00 +0100 |
| commit | a8c3d2b2017671959c0a97fc6ea4fb21e5bce396 (patch) | |
| tree | 579a5e3f4dda2afc569169891456e7147b9bf996 /challenge-002 | |
| parent | 11b76c27c49a032c48c5c79571a5e33b8da3b732 (diff) | |
| download | perlweeklychallenge-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/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" ); +} |
