diff options
| author | rir <rirans@comcast.net> | 2022-06-07 14:54:28 -0400 |
|---|---|---|
| committer | rir <rirans@comcast.net> | 2022-06-10 21:05:21 -0400 |
| commit | cfc134c6dbd2c20e6b36125bd1457ad384250541 (patch) | |
| tree | bf20df99135c763137122bdeba3616e2a2c5e40d | |
| parent | e4ec6fd9f31c65a9a55fb48c6c1b5ea1ad3a2efa (diff) | |
| download | perlweeklychallenge-club-cfc134c6dbd2c20e6b36125bd1457ad384250541.tar.gz perlweeklychallenge-club-cfc134c6dbd2c20e6b36125bd1457ad384250541.tar.bz2 perlweeklychallenge-club-cfc134c6dbd2c20e6b36125bd1457ad384250541.zip | |
168
| -rw-r--r-- | challenge-168/0rir/raku/ch-1.raku | 40 | ||||
| -rw-r--r-- | challenge-168/0rir/raku/ch-2.raku | 57 |
2 files changed, 97 insertions, 0 deletions
diff --git a/challenge-168/0rir/raku/ch-1.raku b/challenge-168/0rir/raku/ch-1.raku new file mode 100644 index 0000000000..174f2651a5 --- /dev/null +++ b/challenge-168/0rir/raku/ch-1.raku @@ -0,0 +1,40 @@ +#!/usr/bin/env raku +# :vim ft=raku sw=4 expandtab +use v6.d; + +use lib $?FILE.IO.parent(2).add("lib"); +use Test; +=begin comment + +Task 1: Perrin Prime Submitted by: Roger Bell_West +The Perrin sequence is defined to start with [3, 0, 2]; thereafter term N +is the sum of terms N-2 and N-3. + +A Perrin prime is a prime number in the Perrin sequence. +Calculate the first 13 Perrin Primes. + +=end comment + +my @exp-perrin = 3, 0, 2, 3, 2, 5, 5, 7, 10, 12, 17, 22, 29, 39; +my @exp-per-rime = 2, 3, 5, 7, 17, 29, 277, 367, 853, 14197, 43721, 1442968193, 792606555396977; + +my Int @Perrin = 3, 0, 2, { $_ = @_[*-3] + @_[*-2] } … ∞; + +my @Perrin-prime = lazy gather { + my %seen; + for 2 … ∞ -> $i { # skip out of order dupes + if @Perrin[$i].is-prime { + take @Perrin[$i] unless %seen{@Perrin[$i]}; + %seen{@Perrin[$i]} = True; + } + } +}; +say 'f(13) = [' ~ @Perrin-prime[0..12].join( ',') ~ ']'; +say ''; + +plan 2; +is @Perrin[0..13], @exp-perrin, 'Perrin'; +is @Perrin-prime[0..12] , @exp-per-rime, '@Perrin-prime[0..12] '; +done-testing; + + diff --git a/challenge-168/0rir/raku/ch-2.raku b/challenge-168/0rir/raku/ch-2.raku new file mode 100644 index 0000000000..631aed6970 --- /dev/null +++ b/challenge-168/0rir/raku/ch-2.raku @@ -0,0 +1,57 @@ +#!/usr/bin/env raku +# :vim ft=raku sw=4 expandtab +use v6.d; +use Test; +use Prime::Factor; # better than my simple implementation from challenge-159 + +constant TEST = False; + +=begin comment +Task 2: Home Prime Submitted by: Mohammad S Anwar + +Given an integer greater than 1, find the home prime of the given number. +The home prime HP(n) of that integer, n, is the first prime number obtained +by repeatedly factoring the increasing concatenation of prime factors +including repetitions. + +Example of procedure. +n f !prime !prime !prime home prime +10 ~ 2*5 -> 25 ~ 5*5 -> 55 ~ 5*11 -> 511 ~ 7*73 -> 773 + +=end comment + +my constant @prime is export + = 2, 3, { first * %% none(@_), (@_[*-1], *+2 … ∞)} … ∞; + +sub home-prime( Int $n is copy where $n > 1 --> Int ) { + until $n.is-prime { + $n = ([~] prime-factors( $n)).Int; + } + $n; +} + +if TEST { + + my @expected = + 1, 2, 3, 211, 5, 23, 7, 3331113965338635107, 311, 773, 11, 223, + 13, 13367, 1129, 31636373, 17, 233, 19, 3318308475676071413, 37, + 211, 23, 331319, 773, 3251, 13367, 227, 29, 547, 31, 241271, 311, + 31397, 1129, 71129, 37, 373, 313, 3314192745739, 41, 379, 43, + 22815088913, 3411949, 223, 47, 6161791591356884791277; + + plan @expected.elems ; + + is True, True, 'NOOP: Tests are on test number.'; + my $i = 2; + for 2 .. @expected.elems { + my $hp = home-prime $_; + is $hp, @expected[$i -1], "hp $hp"; + ++ $i; + } + exit; +} + +sub MAIN(Int $n where $n > 1 ) { + say "The home prime of $n is ", home-prime( $n); +} + |
