diff options
| -rwxr-xr-x | challenge-147/feng-chang/raku/ch-1.raku | 24 | ||||
| -rwxr-xr-x | challenge-147/feng-chang/raku/ch-2.raku | 30 |
2 files changed, 54 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..d3dab98fae --- /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 +} |
