diff options
| author | Ryan Thompson <i@ry.ca> | 2022-06-06 08:30:23 -0600 |
|---|---|---|
| committer | Ryan Thompson <i@ry.ca> | 2022-06-06 08:30:23 -0600 |
| commit | 726ca0cf38fab7033c861757de6ddc712f44cf43 (patch) | |
| tree | 96f2729063ad82635da20ed8aa9c2d2b513a4ac3 | |
| parent | 34bcab0c854011b9443394ce8b421c7f7f75b161 (diff) | |
| download | perlweeklychallenge-club-726ca0cf38fab7033c861757de6ddc712f44cf43.tar.gz perlweeklychallenge-club-726ca0cf38fab7033c861757de6ddc712f44cf43.tar.bz2 perlweeklychallenge-club-726ca0cf38fab7033c861757de6ddc712f44cf43.zip | |
rjt's week 168 solutions and blogs
| -rw-r--r-- | challenge-168/ryan-thompson/README.md | 12 | ||||
| -rw-r--r-- | challenge-168/ryan-thompson/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-168/ryan-thompson/blog1.txt | 1 | ||||
| -rwxr-xr-x | challenge-168/ryan-thompson/perl/ch-1.pl | 26 | ||||
| -rwxr-xr-x | challenge-168/ryan-thompson/perl/ch-2.pl | 29 | ||||
| -rw-r--r-- | challenge-168/ryan-thompson/raku/ch-1.raku | 21 | ||||
| -rwxr-xr-x | challenge-168/ryan-thompson/raku/ch-2.raku | 17 |
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); +} |
