diff options
| author | Niels van Dijke <perlboy@cpan.org> | 2020-12-09 20:05:57 +0000 |
|---|---|---|
| committer | Niels van Dijke <perlboy@cpan.org> | 2020-12-09 20:05:57 +0000 |
| commit | a4e3ae041faeaf7cae91f40758bd18e75e7b5dc2 (patch) | |
| tree | 0b19a6e0ad269dc43fe4ef40d53c7c679b37f6b3 | |
| parent | 931e28a9fe63ad0942cf9f3099191a0e21a978c2 (diff) | |
| download | perlweeklychallenge-club-a4e3ae041faeaf7cae91f40758bd18e75e7b5dc2.tar.gz perlweeklychallenge-club-a4e3ae041faeaf7cae91f40758bd18e75e7b5dc2.tar.bz2 perlweeklychallenge-club-a4e3ae041faeaf7cae91f40758bd18e75e7b5dc2.zip | |
Task 1 & 2
| -rwxr-xr-x | challenge-090/perlboy1967/perl/ch-1.pl | 31 | ||||
| -rwxr-xr-x | challenge-090/perlboy1967/perl/ch-2.pl | 41 |
2 files changed, 72 insertions, 0 deletions
diff --git a/challenge-090/perlboy1967/perl/ch-1.pl b/challenge-090/perlboy1967/perl/ch-1.pl new file mode 100755 index 0000000000..24b20540cf --- /dev/null +++ b/challenge-090/perlboy1967/perl/ch-1.pl @@ -0,0 +1,31 @@ +#!/usr/bin/perl + +# Perl Weekly Challenge - 090 +# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-090/ +# +# Task 1 - DNA Sequence +# +# Author: Niels 'PerlBoy' van Dijke + +use strict; +use warnings; + +# Unbuffered STDOUT +$|++; + +my %dnaMapping = (qw(T A A T G C C G)); + +@ARGV = (qw(GTAAACCCCTTTTCATTTAGACAGATCGACTCCTTATCCATTCTCAGAGATGTGTTGCTGGTCGCCG)) + unless (@ARGV); + +my ($D) = @ARGV; + +die "Not a valid DNA sequence" + if ($D =~ m#[^ATCG]#); + +printf "Input: %s\n", $D; + +$D =~ s#(.)#$dnaMapping{$1}#g; + +printf "Output: %s\n", $D; + diff --git a/challenge-090/perlboy1967/perl/ch-2.pl b/challenge-090/perlboy1967/perl/ch-2.pl new file mode 100755 index 0000000000..123951c9db --- /dev/null +++ b/challenge-090/perlboy1967/perl/ch-2.pl @@ -0,0 +1,41 @@ +#!/usr/bin/perl + +# Perl Weekly Challenge - 090 +# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-090/ +# +# Task 2 Ethiopian Multiplication +# +# Author: Niels 'PerlBoy' van Dijke + +use strict; +use warnings; + +use List::Util qw(sum); +use Scalar::Util qw(looks_like_number); + +# Unbuffered STDOUT +$|++; + +@ARGV = (231, 13) + unless (@ARGV); + +my ($M, $N) = @ARGV; + +die "Please provide two integer numbers (x >= 0)" + unless (looks_like_number($M) and $M =~ m#^[1-9][0-9]*$# and + looks_like_number($N) and $N =~ m#^[1-9][0-9]*$#); + +printf "%d x %d = %d\n", $M, $N, ethiopianMultiply($M,$N); + +sub ethiopianMultiply { + my ($m, $n) = @_; + + my $r; + + while ($m) { + # Some nice binary operations (and & shift) + ($r, $m, $n) = ($r += ($m & 1 ? $n : 0), $m >> 1, $n << 1); + } + + return $r; +} |
