diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-04-01 16:35:07 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-04-01 16:35:07 +0100 |
| commit | 799f12d7de88055d4b50d74487472ecce17cc702 (patch) | |
| tree | c0ae15f07b9458f3bad3a16fc2f8c4ec59b12e33 | |
| parent | 7ffe29aa79bbdaf5883958f0b27e550e17fefba7 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-002/gustavo-chaves/perl5/ch-2.pl | 46 | ||||
| -rw-r--r-- | challenge-002/prajith-p/perl5/ch-1.sh | 1 | ||||
| -rw-r--r-- | challenge-002/simon-proctor/perl6/ch-1.sh | 1 | ||||
| -rw-r--r-- | challenge-002/simon-proctor/perl6/ch-2.sh | 3 |
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) }' |
