diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-02-11 16:14:46 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-11 16:14:46 +0000 |
| commit | 28d85d075303544dff7e022191cd1df153266a9c (patch) | |
| tree | d26b1fee66713e02aa3a372f92ef126c9b2ad694 | |
| parent | 600873d863272e2f62ec24f7b2e7816d065caf7f (diff) | |
| parent | d6546fb6c2bbdfa0f14c0e42ad5e86acd0aa0cc5 (diff) | |
| download | perlweeklychallenge-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-x | challenge-147/feng-chang/raku/ch-1.raku | 24 | ||||
| -rwxr-xr-x | challenge-147/feng-chang/raku/ch-2.raku | 30 | ||||
| -rwxr-xr-x | challenge-147/feng-chang/raku/ch-2a.raku | 22 | ||||
| -rwxr-xr-x | challenge-150/feng-chang/raku/ch-1.raku | 6 | ||||
| -rwxr-xr-x | challenge-150/feng-chang/raku/ch-2.raku | 8 | ||||
| -rwxr-xr-x | challenge-151/feng-chang/raku/ch-2.raku | 9 |
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))) } |
