aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-01-10 19:05:08 +0000
committerGitHub <noreply@github.com>2022-01-10 19:05:08 +0000
commite5138f28be67b47a82fdd71a003e0a358621a5d7 (patch)
tree9917636afef2051368a6a7722169d94651ae5a37
parent8345631869a320666c14e65f83600dcb3494fac1 (diff)
parent94a16b7453f95b6898e3d5d28d2f25a554a0d061 (diff)
downloadperlweeklychallenge-club-e5138f28be67b47a82fdd71a003e0a358621a5d7.tar.gz
perlweeklychallenge-club-e5138f28be67b47a82fdd71a003e0a358621a5d7.tar.bz2
perlweeklychallenge-club-e5138f28be67b47a82fdd71a003e0a358621a5d7.zip
Merge pull request #5499 from Scimon/master
Challenge 147
-rw-r--r--challenge-147/simon-proctor/raku/ch-1.raku27
-rw-r--r--challenge-147/simon-proctor/raku/ch-2.raku18
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