aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2020-12-11 21:31:16 +0100
committerJan Krňávek <Jan.Krnavek@gmail.com>2020-12-11 21:31:16 +0100
commit1e6441c5d807003fc5ada9dad6f9c093498ca2de (patch)
tree5f9c1c534a977d3f3c850d9eac362a223685009c
parent931e28a9fe63ad0942cf9f3099191a0e21a978c2 (diff)
downloadperlweeklychallenge-club-1e6441c5d807003fc5ada9dad6f9c093498ca2de.tar.gz
perlweeklychallenge-club-1e6441c5d807003fc5ada9dad6f9c093498ca2de.tar.bz2
perlweeklychallenge-club-1e6441c5d807003fc5ada9dad6f9c093498ca2de.zip
solutions week 090
-rw-r--r--challenge-090/wambash/raku/ch-1.raku32
-rw-r--r--challenge-090/wambash/raku/ch-2.raku21
2 files changed, 53 insertions, 0 deletions
diff --git a/challenge-090/wambash/raku/ch-1.raku b/challenge-090/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..78ebc75603
--- /dev/null
+++ b/challenge-090/wambash/raku/ch-1.raku
@@ -0,0 +1,32 @@
+#!/usr/bin/env raku
+subset DNAStr of Str where m/^ <[ACGT]>* $/;
+
+class DNA {
+ has DNAStr $.sequence handles<Str gist>;
+
+ multi method COERCE (DNAStr $sequence ) { self.new: :$sequence }
+
+ method nucleotide-count () {
+ $!sequence.comb.Bag
+ }
+
+ method complementary ( --> DNA ) { # coerce `--> DNA()` does not work, hm
+ my DNA() $ =
+ $!sequence.trans: <C G T A> => <G C A T>
+ }
+}
+
+multi MAIN (DNA:D() $dna = 'GTAAACCCCTTTTCATTTAGACAGATCGACTCCTTATCCATTCTCAGAGATGTGTTGCTGGTCGCCG') {
+ put $dna.nucleotide-count;
+ dd $dna.complementary;
+}
+
+multi MAIN (Bool :$test!) {
+ use Test;
+ my DNA() @dna = 'TAGAC', 'ATCTG';
+ is-deeply @dna[0].complementary, @dna[1];
+ is @dna[1].complementary, @dna[0];
+ is-deeply @dna[0].nucleotide-count, bag <A A G T C>;
+ is @dna[1].nucleotide-count.<T>, 2;
+ done-testing;
+}
diff --git a/challenge-090/wambash/raku/ch-2.raku b/challenge-090/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..670c6ee6a8
--- /dev/null
+++ b/challenge-090/wambash/raku/ch-2.raku
@@ -0,0 +1,21 @@
+#!/usr/bin/env raku
+
+sub ethiopian-multiplication ( UInt $a, UInt $b ) {
+ \( :$a, :$b ), { \( a => .<a> div 2, b => .<b> * 2 ) } ... *.<a> == 1
+ andthen .grep: *.<a> !%% 2
+ andthen .map: *.<b>
+ andthen .sum
+}
+
+subset PosInt of UInt where * !== 0;
+
+multi MAIN (PosInt $a, PosInt $b) {
+ say ethiopian-multiplication $a, $b
+}
+
+multi MAIN (Bool :$test!) {
+ use Test;
+ is ethiopian-multiplication( 14,12 ), 14*12, '14 * 12';
+ is ethiopian-multiplication( |$_ ), .[0] * .[1] , .[0] ~ ' * ' ~ .[1] for [Z] (1 .. 10000).pick(10) xx 2;
+ done-testing;
+}