aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-06-12 10:08:17 +0100
committerGitHub <noreply@github.com>2022-06-12 10:08:17 +0100
commit1867acfdb9cfc04e04f80e7706ec6feed9e284de (patch)
tree1853f61af9fce33b628a238d130c289ea18f39bf
parenta5c94cf4c7c99e7c3b081c2ab24dee0da8bb48aa (diff)
parentf1dcdae45ca76173c53de4f4f284bfae3a2d9aa3 (diff)
downloadperlweeklychallenge-club-1867acfdb9cfc04e04f80e7706ec6feed9e284de.tar.gz
perlweeklychallenge-club-1867acfdb9cfc04e04f80e7706ec6feed9e284de.tar.bz2
perlweeklychallenge-club-1867acfdb9cfc04e04f80e7706ec6feed9e284de.zip
Merge pull request #6244 from polettix/polettix/pwc168
Add polettix's solution to challenge-168
-rw-r--r--challenge-168/polettix/blog.txt1
-rw-r--r--challenge-168/polettix/blog1.txt1
-rw-r--r--challenge-168/polettix/perl/ch-1.pl21
-rw-r--r--challenge-168/polettix/perl/ch-2.pl17
-rw-r--r--challenge-168/polettix/perl/cpanfile1
-rw-r--r--challenge-168/polettix/perl/cpanfile.snapshot38
-rw-r--r--challenge-168/polettix/raku/ch-1.raku28
-rw-r--r--challenge-168/polettix/raku/ch-2.raku31
8 files changed, 138 insertions, 0 deletions
diff --git a/challenge-168/polettix/blog.txt b/challenge-168/polettix/blog.txt
new file mode 100644
index 0000000000..f6337130ae
--- /dev/null
+++ b/challenge-168/polettix/blog.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2022/06/08/pwc168-perrin-prime/
diff --git a/challenge-168/polettix/blog1.txt b/challenge-168/polettix/blog1.txt
new file mode 100644
index 0000000000..ad226cc866
--- /dev/null
+++ b/challenge-168/polettix/blog1.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2022/06/09/pwc168-home-prime/
diff --git a/challenge-168/polettix/perl/ch-1.pl b/challenge-168/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..e4952fb0ed
--- /dev/null
+++ b/challenge-168/polettix/perl/ch-1.pl
@@ -0,0 +1,21 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+use ntheory 'is_prime';
+
+my $n = shift // 13;
+say join ', ', perrin_primes($n);
+
+sub perrin_primes ($n) {
+ my @pps = (2, 3, 5);
+ my @state = (2, 5, 5);
+ while (@pps < $n) {
+ push @state, my $candidate = $state[0] + $state[1];
+ shift @state;
+ push @pps, $candidate if is_prime($candidate);
+ }
+ return @pps;
+}
diff --git a/challenge-168/polettix/perl/ch-2.pl b/challenge-168/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..24a1dd1255
--- /dev/null
+++ b/challenge-168/polettix/perl/ch-2.pl
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+use ntheory qw< factor >;
+
+my $n = shift // 10;
+say home_prime($n);
+
+sub home_prime {
+ my $next = join '', factor($_[0]);
+ return $next if $next eq $_[0];
+ $_[0] = $next;
+ goto &home_prime;
+}
diff --git a/challenge-168/polettix/perl/cpanfile b/challenge-168/polettix/perl/cpanfile
new file mode 100644
index 0000000000..94ac365d6f
--- /dev/null
+++ b/challenge-168/polettix/perl/cpanfile
@@ -0,0 +1 @@
+requires 'ntheory';
diff --git a/challenge-168/polettix/perl/cpanfile.snapshot b/challenge-168/polettix/perl/cpanfile.snapshot
new file mode 100644
index 0000000000..2fd600a3af
--- /dev/null
+++ b/challenge-168/polettix/perl/cpanfile.snapshot
@@ -0,0 +1,38 @@
+# carton snapshot format: version 1.0
+DISTRIBUTIONS
+ Math-Prime-Util-0.73
+ pathname: D/DA/DANAJ/Math-Prime-Util-0.73.tar.gz
+ provides:
+ Math::Prime::Util 0.73
+ Math::Prime::Util::ChaCha 0.73
+ Math::Prime::Util::Entropy 0.73
+ Math::Prime::Util::MemFree 0.73
+ Math::Prime::Util::PP 0.73
+ Math::Prime::Util::PrimeArray 0.73
+ Math::Prime::Util::PrimeIterator 0.73
+ ntheory 0.73
+ requirements:
+ Carp 0
+ Config 0
+ Exporter 5.57
+ ExtUtils::MakeMaker 0
+ Math::BigFloat 1.59
+ Math::BigInt 1.88
+ Math::Prime::Util::GMP 0.50
+ Tie::Array 0
+ XSLoader 0.01
+ base 0
+ constant 0
+ perl 5.006002
+ Math-Prime-Util-GMP-0.52
+ pathname: D/DA/DANAJ/Math-Prime-Util-GMP-0.52.tar.gz
+ provides:
+ Math::Prime::Util::GMP 0.52
+ requirements:
+ Carp 0
+ Exporter 5.57
+ ExtUtils::MakeMaker 0
+ Fcntl 0
+ XSLoader 0.01
+ base 0
+ perl 5.006002
diff --git a/challenge-168/polettix/raku/ch-1.raku b/challenge-168/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..28f3b1fb86
--- /dev/null
+++ b/challenge-168/polettix/raku/ch-1.raku
@@ -0,0 +1,28 @@
+#!/usr/bin/env raku
+use v6;
+
+class PerrinSequence {
+ has @!state = [3, 0, 2];
+ method get () {
+ @!state.push(@!state[0] + @!state[1]);
+ return @!state.shift;
+ }
+}
+
+multi sub MAIN (1) { put 2 }
+
+multi sub MAIN (2) { put '2, 3' }
+
+multi sub MAIN (3) { put '2, 3, 5' }
+
+multi sub MAIN (Int:D $n is copy where * > 3 = 13) {
+ my $ps = PerrinSequence.new;
+ $ps.get for 1..7;
+ my @n-primes = gather while $n > 3 {
+ my $candidate = $ps.get;
+ next unless $candidate.is-prime;
+ take $candidate;
+ --$n;
+ }
+ [2, 3, 5, |@n-primes].join(', ').put;
+}
diff --git a/challenge-168/polettix/raku/ch-2.raku b/challenge-168/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..5de2d6efd4
--- /dev/null
+++ b/challenge-168/polettix/raku/ch-2.raku
@@ -0,0 +1,31 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (Int:D $n where * > 1 = 10) { put home-prime($n) }
+
+sub home-prime ($n is copy) {
+ loop {
+ my $m = factors($n).join('').Int;
+ return $n if $n == $m;
+ $n = $m;
+ }
+}
+
+sub factors (Int $remainder is copy) {
+ return 1 if $remainder <= 1;
+ state @primes = 2, 3, 5, -> $n is copy {
+ repeat { $n += 2 } until $n %% none @primes ... { $_ * $_ >= $n }
+ $n;
+ } ... *;
+ gather for @primes -> $factor {
+ if $factor * $factor > $remainder {
+ take $remainder if $remainder > 1;
+ last;
+ }
+
+ # How many times can we divide by this prime?
+ while $remainder %% $factor {
+ take $factor;
+ last if ($remainder div= $factor) === 1;
+ }
+ }
+}