From a4e3ae041faeaf7cae91f40758bd18e75e7b5dc2 Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Wed, 9 Dec 2020 20:05:57 +0000 Subject: Task 1 & 2 --- challenge-090/perlboy1967/perl/ch-1.pl | 31 +++++++++++++++++++++++++ challenge-090/perlboy1967/perl/ch-2.pl | 41 ++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100755 challenge-090/perlboy1967/perl/ch-1.pl create mode 100755 challenge-090/perlboy1967/perl/ch-2.pl 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; +} -- cgit