From 1e6441c5d807003fc5ada9dad6f9c093498ca2de Mon Sep 17 00:00:00 2001 From: Jan Krňávek Date: Fri, 11 Dec 2020 21:31:16 +0100 Subject: solutions week 090 --- challenge-090/wambash/raku/ch-1.raku | 32 ++++++++++++++++++++++++++++++++ challenge-090/wambash/raku/ch-2.raku | 21 +++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 challenge-090/wambash/raku/ch-1.raku create mode 100644 challenge-090/wambash/raku/ch-2.raku 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; + + 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: => + } +} + +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 ; + is @dna[1].nucleotide-count., 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 => . div 2, b => . * 2 ) } ... *. == 1 + andthen .grep: *. !%% 2 + andthen .map: *. + 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; +} -- cgit