aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels van Dijke <perlboy@cpan.org>2020-12-09 20:05:57 +0000
committerNiels van Dijke <perlboy@cpan.org>2020-12-09 20:05:57 +0000
commita4e3ae041faeaf7cae91f40758bd18e75e7b5dc2 (patch)
tree0b19a6e0ad269dc43fe4ef40d53c7c679b37f6b3
parent931e28a9fe63ad0942cf9f3099191a0e21a978c2 (diff)
downloadperlweeklychallenge-club-a4e3ae041faeaf7cae91f40758bd18e75e7b5dc2.tar.gz
perlweeklychallenge-club-a4e3ae041faeaf7cae91f40758bd18e75e7b5dc2.tar.bz2
perlweeklychallenge-club-a4e3ae041faeaf7cae91f40758bd18e75e7b5dc2.zip
Task 1 & 2
-rwxr-xr-xchallenge-090/perlboy1967/perl/ch-1.pl31
-rwxr-xr-xchallenge-090/perlboy1967/perl/ch-2.pl41
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;
+}