diff options
| author | Jan Krňávek <Jan.Krnavek@gmail.com> | 2020-12-11 21:31:16 +0100 |
|---|---|---|
| committer | Jan Krňávek <Jan.Krnavek@gmail.com> | 2020-12-11 21:31:16 +0100 |
| commit | 1e6441c5d807003fc5ada9dad6f9c093498ca2de (patch) | |
| tree | 5f9c1c534a977d3f3c850d9eac362a223685009c | |
| parent | 931e28a9fe63ad0942cf9f3099191a0e21a978c2 (diff) | |
| download | perlweeklychallenge-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.raku | 32 | ||||
| -rw-r--r-- | challenge-090/wambash/raku/ch-2.raku | 21 |
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; +} |
