aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-168/dave-jacoby/blog.txt3
-rw-r--r--challenge-168/dave-jacoby/perl/ch-1.pl28
-rw-r--r--challenge-168/dave-jacoby/perl/ch-2.pl49
3 files changed, 80 insertions, 0 deletions
diff --git a/challenge-168/dave-jacoby/blog.txt b/challenge-168/dave-jacoby/blog.txt
new file mode 100644
index 0000000000..b28b04f643
--- /dev/null
+++ b/challenge-168/dave-jacoby/blog.txt
@@ -0,0 +1,3 @@
+
+
+
diff --git a/challenge-168/dave-jacoby/perl/ch-1.pl b/challenge-168/dave-jacoby/perl/ch-1.pl
new file mode 100644
index 0000000000..39a1510b86
--- /dev/null
+++ b/challenge-168/dave-jacoby/perl/ch-1.pl
@@ -0,0 +1,28 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use experimental qw{ say postderef signatures state };
+
+my @perrin = ( 3, 0, 2 );
+my %perrin_primes;
+$perrin_primes{2} = 1;
+$perrin_primes{3} = 1;
+
+while ( scalar keys %perrin_primes < 13 ) {
+ my $x = $perrin[-2] + $perrin[-3];
+ push @perrin, $x;
+ $perrin_primes{$x} = 1 if is_prime($x);
+}
+
+say join ' ', sort { $a <=> $b } keys %perrin_primes;
+exit;
+
+sub is_prime ($n) {
+ die "Bad number $n" unless length $n;
+ return 0 if $n == 0;
+ return 0 if $n == 1;
+ for ( 2 .. sqrt $n ) { return 0 unless $n % $_ }
+ return 1;
+}
+
diff --git a/challenge-168/dave-jacoby/perl/ch-2.pl b/challenge-168/dave-jacoby/perl/ch-2.pl
new file mode 100644
index 0000000000..1d101a36a4
--- /dev/null
+++ b/challenge-168/dave-jacoby/perl/ch-2.pl
@@ -0,0 +1,49 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use experimental qw{ say postderef signatures state };
+
+use Carp;
+use Try::Tiny;
+use Math::Prime::XS qw{ is_prime };
+
+$| = 1;
+
+my @n = @ARGV;
+push @n, 10 unless scalar @ARGV;
+
+for my $i (@n) {
+ try {
+ my $p = get_home_prime($i);
+ say join "\t", '-', $i, $p;
+ }
+ catch {
+ say $_;
+ };
+}
+
+sub get_home_prime($n) {
+ my $p = $n;
+ while ( !is_prime($p) ) {
+ my @factors = get_factors($p);
+ $p = join '', @factors;
+ print qq{$p };
+ # croak 'Too Big, Too Slow' if length $p > 10;
+ }
+ say '';
+ return $p;
+}
+
+sub get_factors( $n ) {
+ my @factors;
+ for my $i ( 2 .. $n ) {
+ next unless $n % $i == 0;
+ while ( $n % $i == 0 ) {
+ push @factors, $i;
+ $n = $n / $i;
+ }
+ }
+ return @factors;
+}
+