aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2021-12-22 16:46:16 +0100
committerJan Krňávek <Jan.Krnavek@gmail.com>2021-12-22 16:46:16 +0100
commitf76690956c4b5e2aa9ad6016d6223e765663e603 (patch)
tree2edbb9034c79255aad3ca350542ab623b89a17ef
parent86ddf7b64e4859fc0b00eda0cb7cb0bdb62d12ad (diff)
downloadperlweeklychallenge-club-f76690956c4b5e2aa9ad6016d6223e765663e603.tar.gz
perlweeklychallenge-club-f76690956c4b5e2aa9ad6016d6223e765663e603.tar.bz2
perlweeklychallenge-club-f76690956c4b5e2aa9ad6016d6223e765663e603.zip
solutions week 144
-rw-r--r--challenge-144/wambash/raku/ch-1.raku27
-rw-r--r--challenge-144/wambash/raku/ch-2.raku28
2 files changed, 55 insertions, 0 deletions
diff --git a/challenge-144/wambash/raku/ch-1.raku b/challenge-144/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..8fb46487c9
--- /dev/null
+++ b/challenge-144/wambash/raku/ch-1.raku
@@ -0,0 +1,27 @@
+#!/usr/bin/env raku
+
+constant @primes = (2 ... *).grep: *.is-prime;
+constant @semiprimes = (
+ @primes
+ andthen [\,] $_
+ andthen .map: {$_ X* .tail}\
+);
+
+sub semiprime ($n) {
+ @semiprimes
+ andthen .map: { .toggle: * ≤ $n }\
+ andthen .toggle: * !~~ Empty
+ andthen .map: |*
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is-deeply semiprime(100).Set, set(4, 6, 9, 10, 14, 15, 21, 22, 25, 26, 33, 34, 35, 38, 39, 46, 49, 51, 55, 57, 58, 62, 65, 69, 74, 77, 82, 85, 86, 87, 91, 93, 94, 95);
+ done-testing;
+}
+
+multi MAIN ($n = 100) {
+ semiprime $n
+ andthen .batch: 20
+ andthen .map: *.fmt('%5d').put
+}
diff --git a/challenge-144/wambash/raku/ch-2.raku b/challenge-144/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..6c0b6602eb
--- /dev/null
+++ b/challenge-144/wambash/raku/ch-2.raku
@@ -0,0 +1,28 @@
+#!/usr/bin/env raku
+
+sub ulam-next (+@u) {
+ @u
+ andthen .tail ^.. *
+ andthen .first: {
+ $_ == @u.combinations(2).map(*.sum).one
+ }
+}
+
+sub ulam-seq (+@u) {
+ @u
+ andthen |$_, &ulam-next ... *
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is ulam-next(1,2,3,4),6;
+ is ulam-next(1,2,3,4,6,8),11;
+ is ulam-seq(1,2).head(10),(1, 2, 3, 4, 6, 8, 11, 13, 16, 18);
+ is ulam-seq(2,3).head(10),(2, 3, 5, 7, 8, 9, 13, 14, 18, 19);
+ is ulam-seq(2,5).head(10),(2, 5, 7, 9, 11, 12, 13, 15, 19, 23);
+ done-testing;
+}
+
+multi MAIN (*@u, :$n=10) {
+ put ulam-seq(@u).head: $n
+}