aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-02-11 16:14:46 +0000
committerGitHub <noreply@github.com>2022-02-11 16:14:46 +0000
commit28d85d075303544dff7e022191cd1df153266a9c (patch)
treed26b1fee66713e02aa3a372f92ef126c9b2ad694
parent600873d863272e2f62ec24f7b2e7816d065caf7f (diff)
parentd6546fb6c2bbdfa0f14c0e42ad5e86acd0aa0cc5 (diff)
downloadperlweeklychallenge-club-28d85d075303544dff7e022191cd1df153266a9c.tar.gz
perlweeklychallenge-club-28d85d075303544dff7e022191cd1df153266a9c.tar.bz2
perlweeklychallenge-club-28d85d075303544dff7e022191cd1df153266a9c.zip
Merge pull request #5636 from seaker/master
challenge 151, Feng Chang's Raku solutions and more
-rwxr-xr-xchallenge-147/feng-chang/raku/ch-1.raku24
-rwxr-xr-xchallenge-147/feng-chang/raku/ch-2.raku30
-rwxr-xr-xchallenge-147/feng-chang/raku/ch-2a.raku22
-rwxr-xr-xchallenge-150/feng-chang/raku/ch-1.raku6
-rwxr-xr-xchallenge-150/feng-chang/raku/ch-2.raku8
-rwxr-xr-xchallenge-151/feng-chang/raku/ch-2.raku9
6 files changed, 99 insertions, 0 deletions
diff --git a/challenge-147/feng-chang/raku/ch-1.raku b/challenge-147/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..41da33cad4
--- /dev/null
+++ b/challenge-147/feng-chang/raku/ch-1.raku
@@ -0,0 +1,24 @@
+#!/bin/env raku
+
+unit sub MAIN(UInt:D \num = 20);
+
+my @lefty-primes = 2, 3, 5, 7;
+my ($start, $end) = 0, 3;
+
+my UInt $sz = @lefty-primes.elems;
+
+while $sz < num {
+ for 1..9 -> \d {
+ for @lefty-primes[$start..$end] -> \n {
+ my \m = (d ~ n).UInt;
+ if m.is-prime {
+ @lefty-primes.push(m);
+ ++$sz;
+ }
+ }
+ }
+ ($start, $end) = $end + 1, $sz - 1;
+ last if $end < $start;
+}
+
+put @lefty-primes[^((num,$sz).min)];
diff --git a/challenge-147/feng-chang/raku/ch-2.raku b/challenge-147/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..b2ac1fdad3
--- /dev/null
+++ b/challenge-147/feng-chang/raku/ch-2.raku
@@ -0,0 +1,30 @@
+#!/bin/env raku
+
+# https://www.mathblog.dk/project-euler-44-smallest-pair-pentagonal-numbers/
+# is-pentagonal() is key to speed it up
+
+my UInt $i = 1;
+
+outer-loop:
+loop {
+ ++$i;
+ my UInt \n = pentagon($i);
+
+ loop (my UInt $j = $i - 1; $j > 0; --$j) {
+ my UInt \m = pentagon($j);
+ if is-pentagonal(n - m) && is-pentagonal(n + m) {
+ put "\n", n, ' ', m;
+ last outer-loop;
+ }
+ }
+ print "{$i}\r";
+}
+
+sub pentagon(UInt:D \n --> UInt:D) {
+ n * (3 * n - 1) div 2
+}
+
+sub is-pentagonal(UInt:D \n --> Bool:D) {
+ my \p = (sqrt(1.0 + 24 * n) + 1.0) / 6.0;
+ p == p.UInt
+}
diff --git a/challenge-147/feng-chang/raku/ch-2a.raku b/challenge-147/feng-chang/raku/ch-2a.raku
new file mode 100755
index 0000000000..bf937bd660
--- /dev/null
+++ b/challenge-147/feng-chang/raku/ch-2a.raku
@@ -0,0 +1,22 @@
+#!/bin/env raku
+
+# reference https://gfldex.wordpress.com/2022/01/15/manual-hypering/
+
+sub needle(int \b) {
+ sub is-pentagon(\n is raw) { (1 + sqrt(1 + 24 * n)) %% 6 }
+ sub P(\n is raw) { n * (3 * n - 1) div 2 }
+
+ loop (my int $s = 1; $s < b; ++$s) {
+ my \bp = P(b);
+ my \sp = P($s);
+ if is-pentagon(bp + sp) && is-pentagon(bp - sp) {
+ return |(b, $s);
+ }
+ }
+}
+
+sub infix:<notnilor>(\maybenil, \alternative) {
+ maybenil =:= Nil ?? alternative !! maybenil
+}
+
+say (^∞).hyper(:batch(8), :degree(16)).map({ $_ with .&needle }).head;
diff --git a/challenge-150/feng-chang/raku/ch-1.raku b/challenge-150/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..817a93aaaf
--- /dev/null
+++ b/challenge-150/feng-chang/raku/ch-1.raku
@@ -0,0 +1,6 @@
+#!/bin/env raku
+
+unit sub MAIN(Str:D $a, Str:D $b);
+
+my @fibo-words = $a, $b, * ~ * ... *.chars ≥ 51;
+put @fibo-words[*-1].substr(50,1);
diff --git a/challenge-150/feng-chang/raku/ch-2.raku b/challenge-150/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..b992d1867b
--- /dev/null
+++ b/challenge-150/feng-chang/raku/ch-2.raku
@@ -0,0 +1,8 @@
+#!/bin/env raku
+
+unit sub MAIN(UInt:D \N = 500);
+
+my @nums = 1..N;
+@nums .= grep(* !%% $_²) for (2 .. N.sqrt).grep(*.is-prime);
+
+put @nums;
diff --git a/challenge-151/feng-chang/raku/ch-2.raku b/challenge-151/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..4fa124eac5
--- /dev/null
+++ b/challenge-151/feng-chang/raku/ch-2.raku
@@ -0,0 +1,9 @@
+#!/bin/env raku
+
+unit sub MAIN(*@V);
+
+put max-gain(@V);
+
+multi max-gain() { 0 }
+multi max-gain(@V where *.elems == 1|2) { @V.max }
+multi max-gain(@V --> UInt:D) { max(@V[0] + max-gain(@V.tail(*-2)), max-gain(@V.tail(*-1))) }