aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-167/polettix/blog.txt1
-rw-r--r--challenge-167/polettix/blog1.txt1
-rw-r--r--challenge-167/polettix/perl/ch-1.pl32
-rw-r--r--challenge-167/polettix/perl/ch-2.pl32
-rw-r--r--challenge-167/polettix/perl/cpanfile1
-rw-r--r--challenge-167/polettix/perl/cpanfile.snapshot38
-rw-r--r--challenge-167/polettix/raku/ch-1.raku24
-rw-r--r--challenge-167/polettix/raku/ch-2.raku28
8 files changed, 157 insertions, 0 deletions
diff --git a/challenge-167/polettix/blog.txt b/challenge-167/polettix/blog.txt
new file mode 100644
index 0000000000..4bc4c6df7b
--- /dev/null
+++ b/challenge-167/polettix/blog.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2022/05/31/pwc167-circular-prime/
diff --git a/challenge-167/polettix/blog1.txt b/challenge-167/polettix/blog1.txt
new file mode 100644
index 0000000000..c53cb6a776
--- /dev/null
+++ b/challenge-167/polettix/blog1.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2022/06/01/pwc167-gamma-function/
diff --git a/challenge-167/polettix/perl/ch-1.pl b/challenge-167/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..d3facf3603
--- /dev/null
+++ b/challenge-167/polettix/perl/ch-1.pl
@@ -0,0 +1,32 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+use File::Basename 'dirname';
+use lib dirname(__FILE__) . '/local/lib/perl5';
+
+use ntheory qw< next_prime is_prime >;
+
+my $n = shift // 10;
+my @retval;
+my $candidate = 100;
+while ($n > 0) {
+ $candidate = next_prime($candidate);
+ next unless is_circular_prime($candidate);
+ push @retval, $candidate;
+ --$n;
+}
+
+say join ', ', @retval;
+
+sub is_circular_prime ($x) {
+ my $initial = $x;
+ for (2 .. length $x) {
+ return !!0 unless is_prime($x);
+ $x = substr($x, 1) . substr($x, 0, 1);
+ return !!0 if $x < $initial;
+ }
+ return is_prime($x);
+}
diff --git a/challenge-167/polettix/perl/ch-2.pl b/challenge-167/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..a9eacc9091
--- /dev/null
+++ b/challenge-167/polettix/perl/ch-2.pl
@@ -0,0 +1,32 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+say "$_ -> @{[ gamma($_) ]}" for @ARGV;
+
+sub gamma ($x) { exp(gammaln($x)) }
+
+sub gammaln ($x) {
+ die "bad argument in gammaln\n" if $x <= 0;
+
+ state $cof = [
+ 57.1562356658629235, -59.5979603554754912,
+ 14.1360979747417471, -0.491913816097620199,
+ .339946499848118887e-4, .465236289270485756e-4,
+ -.983744753048795646e-4, .158088703224912494e-3,
+ -.210264441724104883e-3, .217439618115212643e-3,
+ -.164318106536763890e-3, .844182239838527433e-4,
+ -.261908384015814087e-4, .368991826595316234e-5
+ ];
+
+ my $y = $x;
+ my $tmp = $x + 5.24218750000000000;
+ $tmp = ($x + 0.5) * log($tmp) - $tmp;
+ my $ser = 0.999999999999997092;
+
+ $ser += $_ / ++$y for $cof->@*;
+
+ return $tmp + log(2.5066282746310005 * $ser / $x);
+} ## end sub gammaln ($x)
diff --git a/challenge-167/polettix/perl/cpanfile b/challenge-167/polettix/perl/cpanfile
new file mode 100644
index 0000000000..91dda9616f
--- /dev/null
+++ b/challenge-167/polettix/perl/cpanfile
@@ -0,0 +1 @@
+requires 'Math::Prime::Util';
diff --git a/challenge-167/polettix/perl/cpanfile.snapshot b/challenge-167/polettix/perl/cpanfile.snapshot
new file mode 100644
index 0000000000..2fd600a3af
--- /dev/null
+++ b/challenge-167/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-167/polettix/raku/ch-1.raku b/challenge-167/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..169412c0e3
--- /dev/null
+++ b/challenge-167/polettix/raku/ch-1.raku
@@ -0,0 +1,24 @@
+#!/usr/bin/env raku
+use v6;
+subset PosInt where * > 0;
+sub MAIN (PosInt:D $n is copy = 10) {
+ my $x = 99;
+ my @result = gather while $n > 0 {
+ if is-circular-prime($x) {
+ take $x;
+ --$n;
+ }
+ $x += 2;
+ }
+ @result.join(', ').put;
+}
+
+sub is-circular-prime ($x is copy) {
+ my $initial = $x;
+ for 1 ..^ $x.chars {
+ return False unless $x.is-prime;
+ $x = $x.substr(*-1, 1) ~ $x.substr(0, *-1);
+ return False if $x < $initial;
+ }
+ return $x.is-prime;
+}
diff --git a/challenge-167/polettix/raku/ch-2.raku b/challenge-167/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..cc4bd533f9
--- /dev/null
+++ b/challenge-167/polettix/raku/ch-2.raku
@@ -0,0 +1,28 @@
+#!/usr/bin/env raku
+use v6;
+
+sub MAIN (*@args) {
+ put "$_ -> {gamma($_)}" for @args;
+}
+
+sub gamma ($x) { exp(gammaln($x)) }
+
+sub gammaln (Numeric:D $x where * > 0) {
+ state @cof =
+ 57.1562356658629235, -59.5979603554754912,
+ 14.1360979747417471, -0.491913816097620199,
+ .339946499848118887e-4, .465236289270485756e-4,
+ -.983744753048795646e-4, .158088703224912494e-3,
+ -.210264441724104883e-3, .217439618115212643e-3,
+ -.164318106536763890e-3, .844182239838527433e-4,
+ -.261908384015814087e-4, .368991826595316234e-5;
+
+ my $tmp = $x + 5.24218750000000000;
+ $tmp = ($x + 0.5) * log($tmp) - $tmp;
+
+ my $y = $x;
+ my $ser = 0.999999999999997092;
+ $ser += $_ / ++$y for |@cof;
+
+ return $tmp + log(2.5066282746310005 * $ser / $x);
+} ## end sub gammaln ($x)