aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-06-11 10:30:26 +0100
committerGitHub <noreply@github.com>2022-06-11 10:30:26 +0100
commit278f0366be384c0f703928d54bf92477c378b18b (patch)
tree6d10eafb12cb0a0fbf72b1e5255cf2490155bbda
parent2072d25f5860df006918cfeb83236f9da356abe0 (diff)
parent74764fdc82cb488d5d59253c00a452aeb2c4980c (diff)
downloadperlweeklychallenge-club-278f0366be384c0f703928d54bf92477c378b18b.tar.gz
perlweeklychallenge-club-278f0366be384c0f703928d54bf92477c378b18b.tar.bz2
perlweeklychallenge-club-278f0366be384c0f703928d54bf92477c378b18b.zip
Merge pull request #6235 from 0rir/168
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);
+}
+