diff options
| author | Jan Krňávek <Jan.Krnavek@gmail.com> | 2021-10-31 12:38:37 +0100 |
|---|---|---|
| committer | Jan Krňávek <Jan.Krnavek@gmail.com> | 2021-10-31 12:39:51 +0100 |
| commit | 236e944e3377223e449847ba963b23cf7e421bc7 (patch) | |
| tree | 6dd91a6a0a95cca41bd241d0c370eea12f93d4b6 | |
| parent | 85e041ce62ebb1025717e5ad04a8681d043c3f08 (diff) | |
| download | perlweeklychallenge-club-236e944e3377223e449847ba963b23cf7e421bc7.tar.gz perlweeklychallenge-club-236e944e3377223e449847ba963b23cf7e421bc7.tar.bz2 perlweeklychallenge-club-236e944e3377223e449847ba963b23cf7e421bc7.zip | |
solutions week 136
| -rw-r--r-- | challenge-136/wambash/raku/ch-1.raku | 19 | ||||
| -rw-r--r-- | challenge-136/wambash/raku/ch-2.raku | 44 |
2 files changed, 63 insertions, 0 deletions
diff --git a/challenge-136/wambash/raku/ch-1.raku b/challenge-136/wambash/raku/ch-1.raku new file mode 100644 index 0000000000..51c7b2675b --- /dev/null +++ b/challenge-136/wambash/raku/ch-1.raku @@ -0,0 +1,19 @@ +#!/usr/bin/env raku + +sub two-friendly( $m,$n ) { + $m gcd $n + andthen .polymod: 2 xx * + andthen .one.so +} + +multi MAIN (Bool :test($)!) { + use Test; + is two-friendly( 8, 24), True; + is two-friendly(26, 39), False; + is two-friendly( 4, 10), True; + done-testing; +} + +multi MAIN ($m, $n) { + say +two-friendly $m, $n; +} diff --git a/challenge-136/wambash/raku/ch-2.raku b/challenge-136/wambash/raku/ch-2.raku new file mode 100644 index 0000000000..5d4939df0a --- /dev/null +++ b/challenge-136/wambash/raku/ch-2.raku @@ -0,0 +1,44 @@ +#!/usr/bin/env raku + +constant @fib = 1, 2, * + * ... *; + +multi fibonacci-sequence(Int $n) { + @fib.toggle: * ≤ $n + andthen .reverse + andthen (\(:$n, :c($_), u => Empty),), { .map: *.&fibonacci-sequence} ... *.cache.all.<n> == 0 + andthen .tail +} + +multi fibonacci-sequence ( Capture $cap (:c(@), :u(@), :n($) where * == 0 ) ) { + $cap +} + + +multi fibonacci-sequence ( Capture (:u(@), :@c,:$n where @c.sum < $n ) ) { + Empty +} + +multi fibonacci-sequence ( Capture (:$n, :c(@) where *.elems == 1, :@u) ) { + \( n => $n - 1, u => ( |@u, 1 ), c => Empty) +} + +multi fibonacci-sequence ( Capture ( :$n, :@c, :@u ) ) { + @c, @c.skip.cache + andthen |.map: { \( n => $n - .head, c => .skip.toggle( :off, * ≤ $n - .head ) , u => (|@u, .head) ) }\ +} + + + +multi MAIN (Bool :test($)!) { + use Test; + is fibonacci-sequence(16).elems, 4; + is fibonacci-sequence(15).elems, 2; + is fibonacci-sequence( 9).elems, 2; + is-deeply fibonacci-sequence( 9).map( *.<u>), ((8,1),(5,3,1)); + is-deeply fibonacci-sequence(15).map( *.<u>), ((13,2),(8,5,2)); + done-testing; +} + +multi MAIN (Int $n) { + say fibonacci-sequence($n).elems +} |
