From f95f9de8bebf4967125de3a10999cbe524f9f1a3 Mon Sep 17 00:00:00 2001 From: Dave Jacoby Date: Sat, 11 Jun 2022 18:02:10 -0400 Subject: Forgot to finish --- challenge-168/dave-jacoby/blog.txt | 3 +++ challenge-168/dave-jacoby/perl/ch-1.pl | 28 +++++++++++++++++++ challenge-168/dave-jacoby/perl/ch-2.pl | 49 ++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 challenge-168/dave-jacoby/blog.txt create mode 100644 challenge-168/dave-jacoby/perl/ch-1.pl create mode 100644 challenge-168/dave-jacoby/perl/ch-2.pl 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; +} + -- cgit