aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-06-07 13:10:11 +0100
committerGitHub <noreply@github.com>2022-06-07 13:10:11 +0100
commitae8db0a34669f8d32b3297896d79b9c7e15c5522 (patch)
tree784c2b35a1a5b08c4d4ecb776ee633ed602e7dc1
parent39091f7fa21a158b2070a721af4e09f36e132cfd (diff)
parent726ca0cf38fab7033c861757de6ddc712f44cf43 (diff)
downloadperlweeklychallenge-club-ae8db0a34669f8d32b3297896d79b9c7e15c5522.tar.gz
perlweeklychallenge-club-ae8db0a34669f8d32b3297896d79b9c7e15c5522.tar.bz2
perlweeklychallenge-club-ae8db0a34669f8d32b3297896d79b9c7e15c5522.zip
Merge pull request #6216 from rjt-pl/master
rjt's week 168 solutions and blogs
-rw-r--r--challenge-168/ryan-thompson/README.md12
-rw-r--r--challenge-168/ryan-thompson/blog.txt1
-rw-r--r--challenge-168/ryan-thompson/blog1.txt1
-rwxr-xr-xchallenge-168/ryan-thompson/perl/ch-1.pl26
-rwxr-xr-xchallenge-168/ryan-thompson/perl/ch-2.pl29
-rw-r--r--challenge-168/ryan-thompson/raku/ch-1.raku21
-rwxr-xr-xchallenge-168/ryan-thompson/raku/ch-2.raku17
7 files changed, 102 insertions, 5 deletions
diff --git a/challenge-168/ryan-thompson/README.md b/challenge-168/ryan-thompson/README.md
index 5047df481c..fb5a53ccbd 100644
--- a/challenge-168/ryan-thompson/README.md
+++ b/challenge-168/ryan-thompson/README.md
@@ -1,16 +1,18 @@
# Ryan Thompson
-## Week 167 Solutions
+## Week 168 Solutions
-### Task 1 › Circular Primes
+### Task 1 › Perrin Primes
* [Perl](perl/ch-1.pl)
+ * [Raku](raku/ch-1.raku)
-### Task 2 › Lanczos Approximation
+### Task 2 › Home Prime
* [Perl](perl/ch-2.pl)
+ * [Raku](raku/ch-2.raku)
## Blogs
- * [Circular Primes](https://ry.ca/2022/05/circular-primes/)
- * [Lanczos Approximation](https://ry.ca/2022/05/lanczos-approximation/)
+ * [Perrin Primes](https://ry.ca/2022/06/perrin-primes/)
+ * [Home Prime](https://ry.ca/2022/06/home-prime/)
diff --git a/challenge-168/ryan-thompson/blog.txt b/challenge-168/ryan-thompson/blog.txt
new file mode 100644
index 0000000000..8d760b87b8
--- /dev/null
+++ b/challenge-168/ryan-thompson/blog.txt
@@ -0,0 +1 @@
+https://ry.ca/2022/06/perrin-primes/
diff --git a/challenge-168/ryan-thompson/blog1.txt b/challenge-168/ryan-thompson/blog1.txt
new file mode 100644
index 0000000000..3251d56929
--- /dev/null
+++ b/challenge-168/ryan-thompson/blog1.txt
@@ -0,0 +1 @@
+https://ry.ca/2022/06/home-prime/
diff --git a/challenge-168/ryan-thompson/perl/ch-1.pl b/challenge-168/ryan-thompson/perl/ch-1.pl
new file mode 100755
index 0000000000..babf617e74
--- /dev/null
+++ b/challenge-168/ryan-thompson/perl/ch-1.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/env perl
+#
+# ch-1.pl - Perrin primes
+#
+# 2022 Ryan Thompson <rjt@cpan.org>
+
+use 5.010;
+use warnings;
+use strict;
+use Math::Prime::Util qw< is_prime >;
+no warnings 'uninitialized';
+
+say for perrin($ARGV[0] // die "Usage: $0 <perrin_max>\n");
+
+# Calculate the first $n Perrin primes
+sub perrin {
+ my ($n2, $n1, $n0) = (3, 0, 2); # Sliding window
+ my @r;
+
+ while (@r < $_[0]) {
+ push @r, $n0 if $n0 > $r[-1] and is_prime($n0);
+ ($n2, $n1, $n0) = ($n1, $n0, $n2 + $n1);
+ }
+
+ @r;
+}
diff --git a/challenge-168/ryan-thompson/perl/ch-2.pl b/challenge-168/ryan-thompson/perl/ch-2.pl
new file mode 100755
index 0000000000..4020667866
--- /dev/null
+++ b/challenge-168/ryan-thompson/perl/ch-2.pl
@@ -0,0 +1,29 @@
+#!/usr/bin/env perl
+#
+# ch-2.pl - Home prime
+#
+# 2022 Ryan Thompson <rjt@cpan.org>
+
+use 5.010;
+use warnings;
+use strict;
+use Math::Prime::Util qw< factor >;
+no warnings 'uninitialized';
+
+# Home prime, iterative implementation is ~20% faster on my system
+sub home_prime {
+ my $n = shift;
+
+ while ((my @fac = factor($n)) > 1) {
+ $n = join '', @fac;
+ }
+
+ return $n;
+}
+
+# Home prime, recursive implementation
+sub home_prime_recursive {
+ my @fac = factor($_[0]);
+
+ @fac == 1 ? $_[0] : home_prime(join '', @fac);
+}
diff --git a/challenge-168/ryan-thompson/raku/ch-1.raku b/challenge-168/ryan-thompson/raku/ch-1.raku
new file mode 100644
index 0000000000..6450426e6d
--- /dev/null
+++ b/challenge-168/ryan-thompson/raku/ch-1.raku
@@ -0,0 +1,21 @@
+#!/usr/bin/env raku
+
+# ch-1.raku - Perrin primes
+#
+# 2021 Ryan Thompson <rjt@cpan.org>
+
+sub MAIN(Int $max) {
+ .say for perrin($max);
+}
+
+sub perrin(Int $max) {
+ my ($n2, $n1, $n0) = (3, 0, 2);
+ my @r = (2);
+
+ while (@r.elems < $max) {
+ @r.push($n0) if $n0 > @r.tail and $n0.is-prime;
+ ($n2, $n1, $n0) = ($n1, $n0, $n2 + $n1);
+ }
+
+ @r;
+}
diff --git a/challenge-168/ryan-thompson/raku/ch-2.raku b/challenge-168/ryan-thompson/raku/ch-2.raku
new file mode 100755
index 0000000000..d095713111
--- /dev/null
+++ b/challenge-168/ryan-thompson/raku/ch-2.raku
@@ -0,0 +1,17 @@
+#!/usr/bin/env raku
+
+# ch-2.raku - Home primes
+#
+# 2021 Ryan Thompson <rjt@cpan.org>
+
+use Prime::Factor;
+
+sub MAIN(Int $n) {
+ home_prime($n).say;
+}
+
+sub home_prime($n) {
+ my @fac = prime-factors($n);
+
+ @fac.elems == 1 ?? $n !! home_prime(@fac.join);
+}