aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorboblied <boblied@gmail.com>2021-02-23 08:24:58 -0600
committerboblied <boblied@gmail.com>2021-02-23 08:24:58 -0600
commitf1deea59e8bc0ec6b0e8e1f598ebdbafc582e45d (patch)
tree860fb860c7a63142f3a25e54ca4c5d98067ff7a2
parent4b6c7073bed9f8409177ccc76198967ab38bcaec (diff)
downloadperlweeklychallenge-club-f1deea59e8bc0ec6b0e8e1f598ebdbafc582e45d.tar.gz
perlweeklychallenge-club-f1deea59e8bc0ec6b0e8e1f598ebdbafc582e45d.tar.bz2
perlweeklychallenge-club-f1deea59e8bc0ec6b0e8e1f598ebdbafc582e45d.zip
PWC 002 solutions
-rwxr-xr-xchallenge-002/bob-lied/perl/ch-1.pl17
-rwxr-xr-xchallenge-002/bob-lied/perl/ch-2.pl64
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;
+}