diff options
| -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 |
