aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2019-04-01 16:35:07 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2019-04-01 16:35:07 +0100
commit799f12d7de88055d4b50d74487472ecce17cc702 (patch)
treec0ae15f07b9458f3bad3a16fc2f8c4ec59b12e33
parent7ffe29aa79bbdaf5883958f0b27e550e17fefba7 (diff)
downloadperlweeklychallenge-club-799f12d7de88055d4b50d74487472ecce17cc702.tar.gz
perlweeklychallenge-club-799f12d7de88055d4b50d74487472ecce17cc702.tar.bz2
perlweeklychallenge-club-799f12d7de88055d4b50d74487472ecce17cc702.zip
- Added solutions from Gustavo Chaves, Prajith P and Simon Proctor.
-rw-r--r--challenge-002/gustavo-chaves/blog.txt1
-rw-r--r--challenge-002/gustavo-chaves/perl5/ch-2.pl46
-rw-r--r--challenge-002/prajith-p/perl5/ch-1.sh1
-rw-r--r--challenge-002/simon-proctor/perl6/ch-1.sh1
-rw-r--r--challenge-002/simon-proctor/perl6/ch-2.sh3
5 files changed, 52 insertions, 0 deletions
diff --git a/challenge-002/gustavo-chaves/blog.txt b/challenge-002/gustavo-chaves/blog.txt
new file mode 100644
index 0000000000..be76eb1b9c
--- /dev/null
+++ b/challenge-002/gustavo-chaves/blog.txt
@@ -0,0 +1 @@
+https://blog.gnustavo.com/2019/03/perl-weekly-chalenge-2.html
diff --git a/challenge-002/gustavo-chaves/perl5/ch-2.pl b/challenge-002/gustavo-chaves/perl5/ch-2.pl
new file mode 100644
index 0000000000..1b2da18b08
--- /dev/null
+++ b/challenge-002/gustavo-chaves/perl5/ch-2.pl
@@ -0,0 +1,46 @@
+#!/usr/bin/env perl
+
+use 5.026;
+use strict;
+use integer;
+use warnings;
+
+my $usage = "Usage: $0 FROM_BASE TO_BASE NUMBER\n\nError";
+
+die "$usage: invalid number of arguments\n"
+ unless @ARGV == 3;
+
+my @digits = ('0' .. '9', 'A' .. 'Z');
+my %digits = map {$digits[$_] => $_} 0 .. @digits-1;
+
+my ($from_base, $to_base, $number) = @ARGV;
+
+die "$usage: FROM_BASE must be between 2 and @digits\n"
+ if $from_base < 2 || $from_base > @digits;
+
+die "$usage: TO_BASE must be between 2 and @digits\n"
+ if $to_base < 2 || $to_base > @digits;
+
+sub from_base {
+ my ($base, $string) = @_;
+ my $n = 0;
+ $string =~ s/^0+//;
+ foreach my $char (reverse split //, $string) {
+ die "$usage: Invalid char in NUMBER: '$char'\n"
+ if $digits{$char} >= $base;
+ $n *= $base;
+ $n += $digits{$char};
+ }
+ return $n;
+}
+
+sub to_base {
+ my ($base, $n) = @_;
+ my $string = '';
+ for (my $i = $n; $i; $i /= $base) {
+ $string .= $digits[$i % $base];
+ }
+ return length $string ? reverse $string : '0';
+}
+
+say to_base($to_base, from_base($from_base, $number));
diff --git a/challenge-002/prajith-p/perl5/ch-1.sh b/challenge-002/prajith-p/perl5/ch-1.sh
new file mode 100644
index 0000000000..6079abb25c
--- /dev/null
+++ b/challenge-002/prajith-p/perl5/ch-1.sh
@@ -0,0 +1 @@
+perl -E 'say 0+ "000547023"';
diff --git a/challenge-002/simon-proctor/perl6/ch-1.sh b/challenge-002/simon-proctor/perl6/ch-1.sh
new file mode 100644
index 0000000000..319ff9df2c
--- /dev/null
+++ b/challenge-002/simon-proctor/perl6/ch-1.sh
@@ -0,0 +1 @@
+perl6 -e 'sub MAIN( Str $n ) { say $n.Rat }'
diff --git a/challenge-002/simon-proctor/perl6/ch-2.sh b/challenge-002/simon-proctor/perl6/ch-2.sh
new file mode 100644
index 0000000000..39e7c59bb8
--- /dev/null
+++ b/challenge-002/simon-proctor/perl6/ch-2.sh
@@ -0,0 +1,3 @@
+perl6 -e 'sub MAIN( IntStr $i ) { say $i.base(35) }'
+
+perl6 -e 'sub MAIN( Str $s ) { say $s.parse-base(35) }'