aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrir <rirans@comcast.net>2022-06-07 14:54:28 -0400
committerrir <rirans@comcast.net>2022-06-10 21:05:21 -0400
commitcfc134c6dbd2c20e6b36125bd1457ad384250541 (patch)
treebf20df99135c763137122bdeba3616e2a2c5e40d
parente4ec6fd9f31c65a9a55fb48c6c1b5ea1ad3a2efa (diff)
downloadperlweeklychallenge-club-cfc134c6dbd2c20e6b36125bd1457ad384250541.tar.gz
perlweeklychallenge-club-cfc134c6dbd2c20e6b36125bd1457ad384250541.tar.bz2
perlweeklychallenge-club-cfc134c6dbd2c20e6b36125bd1457ad384250541.zip
168
-rw-r--r--challenge-168/0rir/raku/ch-1.raku40
-rw-r--r--challenge-168/0rir/raku/ch-2.raku57
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);
+}
+