aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-12-23 12:25:13 +0000
committerGitHub <noreply@github.com>2021-12-23 12:25:13 +0000
commita042d193e61580e8bd4011d391ef13b398396597 (patch)
tree2edbb9034c79255aad3ca350542ab623b89a17ef
parent86ddf7b64e4859fc0b00eda0cb7cb0bdb62d12ad (diff)
parentf76690956c4b5e2aa9ad6016d6223e765663e603 (diff)
downloadperlweeklychallenge-club-a042d193e61580e8bd4011d391ef13b398396597.tar.gz
perlweeklychallenge-club-a042d193e61580e8bd4011d391ef13b398396597.tar.bz2
perlweeklychallenge-club-a042d193e61580e8bd4011d391ef13b398396597.zip
Merge pull request #5402 from wambash/challenge-week-144
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
+}