diff options
| -rw-r--r-- | challenge-002/veesh-goldman/perl5/ch-1.pl | 17 | ||||
| -rw-r--r-- | challenge-002/veesh-goldman/perl5/ch-2.pl | 46 |
2 files changed, 63 insertions, 0 deletions
diff --git a/challenge-002/veesh-goldman/perl5/ch-1.pl b/challenge-002/veesh-goldman/perl5/ch-1.pl new file mode 100644 index 0000000000..e9223cac3b --- /dev/null +++ b/challenge-002/veesh-goldman/perl5/ch-1.pl @@ -0,0 +1,17 @@ +#! /usr/bin/perl +use v5.22; +say 'Casting with addition'; +print 'Number? '; +say 0 + <>; + +say 'Regex substitution'; +print 'Number? '; +say <> =~ s/^0*(\d+)$/$1/r; + +say 'Explicit integer casting'; +print 'Number? '; +say int <>; + +say 'Using map and a flip flop'; +print 'Number? '; +say join '', map { /[^0]/ .. /\n/ ? $_ : () } split //, <>; diff --git a/challenge-002/veesh-goldman/perl5/ch-2.pl b/challenge-002/veesh-goldman/perl5/ch-2.pl new file mode 100644 index 0000000000..59fb74872a --- /dev/null +++ b/challenge-002/veesh-goldman/perl5/ch-2.pl @@ -0,0 +1,46 @@ +#! /usr/bin/perl +use v5.22; +my @to_table = ( 0 .. 9, 'A' .. 'Y'); +my %from_table; +while (my ($index, $element) = each @to_table) { + $from_table{$element} = $index; +} + +sub convert_to { + my $x = shift; my $pow = 1; my @ret; + while ($x > 0) { + my $digit = $x % 35; + unshift @ret, $to_table[$digit]; + $x -= $digit; + $x /= 35; + } + return join '', @ret +} + +sub convert_from { + my $x; my $pow =1; + for (reverse split //, shift) { + $x += $from_table{$_} * $pow; + $pow *= 35; + } + return $x +} + +my $command = shift; +if ($command eq 'to') { + my $arg = shift; + die 'Need a number to convert' unless $arg; + die 'Improper base10 number' unless $arg =~ /^\d+$/; + say convert_to($arg) +} elsif ($command eq 'from') { + my $arg = shift; + die 'Need a number to convert' unless $arg; + die 'Improper base35 number' unless $arg =~ /^[0-9A-Y]+$/; + say convert_from($arg) +} else { + say <<"EOF" + USAGE: $0 [ to | from ] + to - will convert a base10 number to base35 + from - will convert a base35 number to base10 +EOF +} |
