diff options
| author | Scimon <simon.proctor@gmail.com> | 2022-01-10 15:47:18 +0000 |
|---|---|---|
| committer | Scimon <simon.proctor@gmail.com> | 2022-01-10 15:47:18 +0000 |
| commit | 94a16b7453f95b6898e3d5d28d2f25a554a0d061 (patch) | |
| tree | cce9d1d452a25224cce1e2e0983f0358c3c89d19 | |
| parent | e9411bdc7658179af3f23d3ada7970323547a7d7 (diff) | |
| download | perlweeklychallenge-club-94a16b7453f95b6898e3d5d28d2f25a554a0d061.tar.gz perlweeklychallenge-club-94a16b7453f95b6898e3d5d28d2f25a554a0d061.tar.bz2 perlweeklychallenge-club-94a16b7453f95b6898e3d5d28d2f25a554a0d061.zip | |
Challenge 147
| -rw-r--r-- | challenge-147/simon-proctor/raku/ch-1.raku | 27 | ||||
| -rw-r--r-- | challenge-147/simon-proctor/raku/ch-2.raku | 18 |
2 files changed, 45 insertions, 0 deletions
diff --git a/challenge-147/simon-proctor/raku/ch-1.raku b/challenge-147/simon-proctor/raku/ch-1.raku new file mode 100644 index 0000000000..574ec4a48b --- /dev/null +++ b/challenge-147/simon-proctor/raku/ch-1.raku @@ -0,0 +1,27 @@ +#!/usr/bin/env raku + +use experimental :cached; + +#| Display the first 20 base 10 left-truncatable primes +multi sub MAIN() { + .say for (1..*).grep( { is-left-truncatable($_) } )[^20]; +} + +multi sub MAIN("test") is hidden-from-USAGE { + use Test; + ok( is-left-truncatable( 9137 ) ); + ok( is-left-truncatable( 137 ) ); + ok( is-left-truncatable( 7 ) ); + ok( ! is-left-truncatable( 101 ) ); + ok( ! is-left-truncatable( 8 ) ); + ok( ! is-left-truncatable( 151 ) ); + done-testing; +} + +sub is-left-truncatable( UInt \v ) is pure is cached { + return False unless v.is-prime; + return False if v ~~ /0/; + return True if v.codes == 1; + + return is-left-truncatable( v.substr(1).Int ); +} diff --git a/challenge-147/simon-proctor/raku/ch-2.raku b/challenge-147/simon-proctor/raku/ch-2.raku new file mode 100644 index 0000000000..60b8421907 --- /dev/null +++ b/challenge-147/simon-proctor/raku/ch-2.raku @@ -0,0 +1,18 @@ +#!/usr/bin/env raku + +my @pentagons = (1..*).map( { $_ * ((3 * $_)-1) / 2 }); + +my @vals = lazy gather { + for (0..5000) -> $i { + for (0..^$i) -> $j { + take (@pentagons[$i], @pentagons[$j], $i+$j); + } + } +}; + +@vals.race.grep( + -> (\a, \b, \m) { + my \check = Set(@pentagons[^m]); + ((a - b) (elem) check) && ((a + b) (elem) check); + } +).map( -> (\a, \b, \m) { ( a, b ) } ).first.say |
