From 94a16b7453f95b6898e3d5d28d2f25a554a0d061 Mon Sep 17 00:00:00 2001 From: Scimon Date: Mon, 10 Jan 2022 15:47:18 +0000 Subject: Challenge 147 --- challenge-147/simon-proctor/raku/ch-1.raku | 27 +++++++++++++++++++++++++++ challenge-147/simon-proctor/raku/ch-2.raku | 18 ++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 challenge-147/simon-proctor/raku/ch-1.raku create mode 100644 challenge-147/simon-proctor/raku/ch-2.raku 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 -- cgit