aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2021-10-31 12:38:37 +0100
committerJan Krňávek <Jan.Krnavek@gmail.com>2021-10-31 12:39:51 +0100
commit236e944e3377223e449847ba963b23cf7e421bc7 (patch)
tree6dd91a6a0a95cca41bd241d0c370eea12f93d4b6
parent85e041ce62ebb1025717e5ad04a8681d043c3f08 (diff)
downloadperlweeklychallenge-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.raku19
-rw-r--r--challenge-136/wambash/raku/ch-2.raku44
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
+}