diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-04-03 20:38:50 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-04-03 20:38:50 +0100 |
| commit | 9146c3c875952f620ef257113fe65a1b999182b1 (patch) | |
| tree | 417a65124fdfe942ccbefd492fcf25eb0a8cfd77 | |
| parent | d0aa5b1bd184aa478492c1bf6ddecef60651cbd0 (diff) | |
| download | perlweeklychallenge-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.pl | 17 | ||||
| -rw-r--r-- | challenge-002/steven-wilson/perl5/ch-2.pl | 55 |
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; +} |
