aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2021-04-24 22:52:15 +0200
committerJan Krňávek <Jan.Krnavek@gmail.com>2021-04-24 22:52:15 +0200
commitdf79660de2080b422303527446886a2c1d398277 (patch)
tree28720180c0f6241391d6e9cf6f0b2d376ba532b6
parent9571f967ddd4d11a0195c2b9f8f3fbb63fad9a15 (diff)
downloadperlweeklychallenge-club-df79660de2080b422303527446886a2c1d398277.tar.gz
perlweeklychallenge-club-df79660de2080b422303527446886a2c1d398277.tar.bz2
perlweeklychallenge-club-df79660de2080b422303527446886a2c1d398277.zip
solutions week 109
-rw-r--r--challenge-109/wambash/raku/ch-1.raku21
-rw-r--r--challenge-109/wambash/raku/ch-2.raku20
2 files changed, 41 insertions, 0 deletions
diff --git a/challenge-109/wambash/raku/ch-1.raku b/challenge-109/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..d8e7aa8bfe
--- /dev/null
+++ b/challenge-109/wambash/raku/ch-1.raku
@@ -0,0 +1,21 @@
+#!/usr/bin/env raku
+
+sub chowla-number ( $n ) {
+ 2 .. $n / 2
+ andthen .grep: $n %% *
+ andthen .sum
+}
+
+constant @chowla-numbers = (1 .. ∞).map: &chowla-number;
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is @chowla-numbers.head(20), (0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21);
+ my $big-prime = (100_000 .. ∞).first: *.is-prime;
+ is chowla-number($big-prime), 0;
+ done-testing;
+}
+
+multi MAIN ($n=20) {
+ put @chowla-numbers.head($n)
+}
diff --git a/challenge-109/wambash/raku/ch-2.raku b/challenge-109/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..d8380fdb4a
--- /dev/null
+++ b/challenge-109/wambash/raku/ch-2.raku
@@ -0,0 +1,20 @@
+#!/usr/bin/env raku
+
+sub four-squares-puzzle ( +@n ) {
+ @n.permutations
+ andthen .pick: *
+ andthen .map: *.rotor: 2 => -1, 3 => -1, 3 => -1, 2 => -1
+ andthen .first: { [==] .cache.map: *.sum }
+}
+
+
+multi MAIN ( +@n ) {
+ say four-squares-puzzle @n
+}
+
+multi MAIN (:test($)!) {
+ use Test;
+ is four-squares-puzzle(1..7).all.sum, 9|10|11 ;
+ is four-squares-puzzle(2,-2,10,-8, 30, -22,+22).all.sum, 0 ;
+ done-testing;
+}