diff options
| author | boblied <boblied@gmail.com> | 2021-02-25 15:37:39 -0600 |
|---|---|---|
| committer | boblied <boblied@gmail.com> | 2021-02-25 15:37:39 -0600 |
| commit | 9af0fee8902c41562162df621d4b595b6dc0d7ea (patch) | |
| tree | 721c65f30412c472c4b6dc1e9b830adaa05cc816 | |
| parent | 29292a8a8192db4df994839fe7cd7c18dadab0e0 (diff) | |
| parent | f1deea59e8bc0ec6b0e8e1f598ebdbafc582e45d (diff) | |
| download | perlweeklychallenge-club-9af0fee8902c41562162df621d4b595b6dc0d7ea.tar.gz perlweeklychallenge-club-9af0fee8902c41562162df621d4b595b6dc0d7ea.tar.bz2 perlweeklychallenge-club-9af0fee8902c41562162df621d4b595b6dc0d7ea.zip | |
Merge branch '002'
| -rwxr-xr-x | challenge-002/bob-lied/perl/ch-1.pl | 17 | ||||
| -rwxr-xr-x | challenge-002/bob-lied/perl/ch-2.pl | 64 |
2 files changed, 81 insertions, 0 deletions
diff --git a/challenge-002/bob-lied/perl/ch-1.pl b/challenge-002/bob-lied/perl/ch-1.pl new file mode 100755 index 0000000000..e13ae09990 --- /dev/null +++ b/challenge-002/bob-lied/perl/ch-1.pl @@ -0,0 +1,17 @@ +#!/usr/bin/env perl +# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu: +#============================================================================= +# ch-1.pl +#============================================================================= +# Copyright (c) 2021, Bob Lied +#============================================================================= +# Perl Weekly Challenge 002, Task #1, Remove Leading Zeroes +# Write a script or one-liner to remove leading zeros from positive numbers. +#============================================================================= + +use strict; +use warnings; +use 5.020; + +# Adding 0 forces interpretation as a number, loses leading zeroes +for ( @ARGV ) { say $_+0; } diff --git a/challenge-002/bob-lied/perl/ch-2.pl b/challenge-002/bob-lied/perl/ch-2.pl new file mode 100755 index 0000000000..ca724b0d4f --- /dev/null +++ b/challenge-002/bob-lied/perl/ch-2.pl @@ -0,0 +1,64 @@ +#!/usr/bin/env perl +# vim:set ts=4 sw=4 sts=4 et ai wm=0 nu: +#============================================================================= +# ch-2.pl +#============================================================================= +# Copyright (c) 2021, Bob Lied +#============================================================================= +# Perl Weekly Challenge 002, Task #2 Base 35 +# Write a script that can convert integers to and from a base35 +# representation, using the characters 0-9 and A-Y. +#============================================================================= + +use strict; +use warnings; +use 5.020; + +use experimental qw/ signatures /; + +my $BASE = 35; + +my @BaseDigit = ( 0 .. 9, "A" .. "Z" ); +my %BaseVal; +$BaseVal{$_} = $_ for 0..9; +$BaseVal{$_} = 10 + ord($_) - ord("A") for "A" .. "Y"; + +for ( @ARGV ) +{ + if ( m/^\d+$/ ) + { + say toBase($_, $BASE); + } + else + { + say fromBase($_, $BASE); + } +} + +# Given a decimal number, represent in base 35. +sub toBase($n, $base) +{ + my @answer; + while ( $n ) + { + my $dig = $n % $base; + $n = ($n - $dig) / $base; + unshift @answer, $dig; + } + + return join("", map { $BaseDigit[$_] } @answer); +} + +sub fromBase($s, $base) +{ + my $place = $base; + + my @digits = ( reverse split("", $s) ); + my $val = $BaseVal{ shift @digits }; + for my $dig ( @digits ) + { + $val += $BaseVal{$dig} * $place; + $place *= $base; + } + return $val; +} |
