aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2019-04-03 20:38:50 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2019-04-03 20:38:50 +0100
commit9146c3c875952f620ef257113fe65a1b999182b1 (patch)
tree417a65124fdfe942ccbefd492fcf25eb0a8cfd77
parentd0aa5b1bd184aa478492c1bf6ddecef60651cbd0 (diff)
downloadperlweeklychallenge-club-9146c3c875952f620ef257113fe65a1b999182b1.tar.gz
perlweeklychallenge-club-9146c3c875952f620ef257113fe65a1b999182b1.tar.bz2
perlweeklychallenge-club-9146c3c875952f620ef257113fe65a1b999182b1.zip
- Added solutions by "Steven Wilson".
-rw-r--r--challenge-002/steven-wilson/perl5/ch-1.pl17
-rw-r--r--challenge-002/steven-wilson/perl5/ch-2.pl55
2 files changed, 72 insertions, 0 deletions
diff --git a/challenge-002/steven-wilson/perl5/ch-1.pl b/challenge-002/steven-wilson/perl5/ch-1.pl
new file mode 100644
index 0000000000..37c7b9c5bb
--- /dev/null
+++ b/challenge-002/steven-wilson/perl5/ch-1.pl
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+# Author: Steven Wilson
+# Date: 2019-04-03
+# Challenge #1
+# Write a script or one-liner to remove leading zeros from positive numbers.
+#
+# Usage: $ ./week2c1 0099
+
+use warnings;
+use strict;
+use feature qw/ say /;
+
+my ($number) = @ARGV;
+
+$number =~ /[0]*(\d+)/;
+
+say $1;
diff --git a/challenge-002/steven-wilson/perl5/ch-2.pl b/challenge-002/steven-wilson/perl5/ch-2.pl
new file mode 100644
index 0000000000..1726baf8a3
--- /dev/null
+++ b/challenge-002/steven-wilson/perl5/ch-2.pl
@@ -0,0 +1,55 @@
+#!/usr/bin/env perl
+# Author: Steven Wilson
+# Date: 2019-04-02
+# Challenge #2
+# Write a script that can convert integers to and from a base35
+# representation, using the characters 0-9 and A-Y. Dave Jacoby came up with
+# nice description about base35, in case you needed some background.
+#
+# Usage: ./week2c2 <number> [enc|dec]
+# eg:
+# $ ./week2c2 13 enc, encodes 13 in base 10 to D in base 35.
+# $ ./week2c2 10 dec, decodes 10 in base 35 to 35 in base 10.
+
+use warnings;
+use strict;
+use feature qw/ say /;
+
+my @digits = qw / 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q
+ R S T U V W X Y /;
+
+my ( $number, $operation ) = @ARGV;
+
+if ( $operation eq "enc" ) {
+ say "$number encoded in base 35 is ", base35_encode($number);
+}
+elsif ( $operation eq "dec" ) {
+ say "$number decoded from base 35 is ", base35_decode($number);
+}
+
+sub base35_encode {
+ my $number = shift;
+ my @answer;
+ while ( $number > 34 ) {
+ unshift @answer, $digits[ $number % 35 ];
+ $number = $number / 35;
+ }
+ unshift @answer, $digits[$number];
+ return @answer;
+}
+
+sub base35_decode {
+ my $number = shift;
+ my @number_as_array = split( //, $number );
+ my $number_length = @number_as_array;
+ my $answer = 0;
+ my $counter = 0;
+ my $digit_in_base10;
+ for ( my $i = $number_length - 1; $i >= 0; $i-- ) {
+ ($digit_in_base10)
+ = grep { $digits[$_] eq $number_as_array[$counter] } ( 0 .. 34 );
+ $answer += $digit_in_base10 * 35**$i;
+ $counter++;
+ }
+ return $answer;
+}