diff options
| -rw-r--r-- | challenge-146/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-146/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-146/polettix/perl/ch-1.pl | 28 | ||||
| -rw-r--r-- | challenge-146/polettix/perl/ch-2.pl | 15 | ||||
| -rw-r--r-- | challenge-146/polettix/raku/ch-1.raku | 5 | ||||
| -rw-r--r-- | challenge-146/polettix/raku/ch-2.raku | 12 |
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: '/'; +} |
