aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-146/polettix/blog.txt1
-rw-r--r--challenge-146/polettix/blog1.txt1
-rw-r--r--challenge-146/polettix/perl/ch-1.pl28
-rw-r--r--challenge-146/polettix/perl/ch-2.pl15
-rw-r--r--challenge-146/polettix/raku/ch-1.raku5
-rw-r--r--challenge-146/polettix/raku/ch-2.raku12
6 files changed, 62 insertions, 0 deletions
diff --git a/challenge-146/polettix/blog.txt b/challenge-146/polettix/blog.txt
new file mode 100644
index 0000000000..10eeeeb32f
--- /dev/null
+++ b/challenge-146/polettix/blog.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2022/01/05/pwc146-10001st-prime-number/
diff --git a/challenge-146/polettix/blog1.txt b/challenge-146/polettix/blog1.txt
new file mode 100644
index 0000000000..273a484fe2
--- /dev/null
+++ b/challenge-146/polettix/blog1.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2022/01/06/pwc146-curious-fraction-tree/
diff --git a/challenge-146/polettix/perl/ch-1.pl b/challenge-146/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..0a792d56b5
--- /dev/null
+++ b/challenge-146/polettix/perl/ch-1.pl
@@ -0,0 +1,28 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+say prime_at(shift // 10001);
+
+sub prime_at ($n) {
+ state $primes = [ undef, 2, 3 ];
+ state $squares = [ undef, 4, 9 ];
+ FIND_NEW:
+ while ($primes->$#* < $n) {
+ my $candidate = $primes->[-1] + 2;
+ while ('necessary') {
+ for my $i (2 .. $primes->$#*) {
+ if ($squares->[$i] > $candidate) {
+ push $primes->@*, $candidate;
+ push $squares->@*, $candidate * $candidate;
+ next FIND_NEW;
+ }
+ last unless $candidate % $primes->[$i];
+ }
+ $candidate += 2;
+ }
+ }
+ return $primes->[$n];
+}
diff --git a/challenge-146/polettix/perl/ch-2.pl b/challenge-146/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..17e6dc0894
--- /dev/null
+++ b/challenge-146/polettix/perl/ch-2.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+my $member = shift // '4/3';
+my $parent = parent_of($member);
+my $grandparent = parent_of($parent);
+say "parent = '$parent' and grandparent = '$grandparent'";
+
+sub parent_of ($frac) {
+ my ($num, $den) = split m{/}mxs, $frac;
+ join '/', $num < $den ? ($num, $den - $num) : ($num - $den, $den);
+}
diff --git a/challenge-146/polettix/raku/ch-1.raku b/challenge-146/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..7eb6f45e94
--- /dev/null
+++ b/challenge-146/polettix/raku/ch-1.raku
@@ -0,0 +1,5 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (Int:D $n where * > 0 = 10001) {
+ ((1 .. *).grep: *.is-prime)[$n - 1].put
+}
diff --git a/challenge-146/polettix/raku/ch-2.raku b/challenge-146/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..35d95d1ce1
--- /dev/null
+++ b/challenge-146/polettix/raku/ch-2.raku
@@ -0,0 +1,12 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (Str:D $member = '4/3') {
+ my $parent = parent-of($member);
+ my $grandparent = parent-of($parent);
+ put "parent = '$parent' and grandparent = '$grandparent'";
+}
+
+sub parent-of ($frac) {
+ my ($n, $d) = $frac.split: '/';
+ ($n < $d ?? ($n, $d - $n) !! ($n - $d, $d)).join: '/';
+}