aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
+}