aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Russell <ac.russell@live.com>2021-12-26 16:40:58 -0500
committerAdam Russell <ac.russell@live.com>2021-12-26 16:40:58 -0500
commit7bf58f9c0a23a7d8b6b98c8b2419f9f320eedac1 (patch)
tree4e269839e1957bf072d9201f233307f76faf450f
parent5657ff55c37e028b0c8a2a6388d86e2c4bfedc85 (diff)
downloadperlweeklychallenge-club-7bf58f9c0a23a7d8b6b98c8b2419f9f320eedac1.tar.gz
perlweeklychallenge-club-7bf58f9c0a23a7d8b6b98c8b2419f9f320eedac1.tar.bz2
perlweeklychallenge-club-7bf58f9c0a23a7d8b6b98c8b2419f9f320eedac1.zip
Perl solutions and blog for Challenge 144.
-rw-r--r--challenge-144/adam-russell/blog.txt1
-rw-r--r--challenge-144/adam-russell/blog1.txt0
-rw-r--r--challenge-144/adam-russell/cxx/ch-1.cxx0
-rw-r--r--challenge-144/adam-russell/cxx/ch-2.cxx0
-rw-r--r--challenge-144/adam-russell/perl/ch-1.pl28
-rw-r--r--challenge-144/adam-russell/perl/ch-2.pl52
-rw-r--r--challenge-144/adam-russell/prolog/ch-1.p0
-rw-r--r--challenge-144/adam-russell/prolog/ch-2.p0
8 files changed, 69 insertions, 12 deletions
diff --git a/challenge-144/adam-russell/blog.txt b/challenge-144/adam-russell/blog.txt
index e69de29bb2..2714c7814a 100644
--- a/challenge-144/adam-russell/blog.txt
+++ b/challenge-144/adam-russell/blog.txt
@@ -0,0 +1 @@
+http://www.rabbitfarm.com/cgi-bin/blosxom/2021/12/26/perl
diff --git a/challenge-144/adam-russell/blog1.txt b/challenge-144/adam-russell/blog1.txt
deleted file mode 100644
index e69de29bb2..0000000000
--- a/challenge-144/adam-russell/blog1.txt
+++ /dev/null
diff --git a/challenge-144/adam-russell/cxx/ch-1.cxx b/challenge-144/adam-russell/cxx/ch-1.cxx
deleted file mode 100644
index e69de29bb2..0000000000
--- a/challenge-144/adam-russell/cxx/ch-1.cxx
+++ /dev/null
diff --git a/challenge-144/adam-russell/cxx/ch-2.cxx b/challenge-144/adam-russell/cxx/ch-2.cxx
deleted file mode 100644
index e69de29bb2..0000000000
--- a/challenge-144/adam-russell/cxx/ch-2.cxx
+++ /dev/null
diff --git a/challenge-144/adam-russell/perl/ch-1.pl b/challenge-144/adam-russell/perl/ch-1.pl
index fa42aad875..7be66d5566 100644
--- a/challenge-144/adam-russell/perl/ch-1.pl
+++ b/challenge-144/adam-russell/perl/ch-1.pl
@@ -1,10 +1,11 @@
use strict;
use warnings;
##
-#
+# Write a script to generate all Semiprime numbers <= 100.
##
use boolean;
use LWP::UserAgent;
+use constant N => 100;
use constant PRIME_URL => "http://primes.utm.edu/lists/small/100000.txt";
sub get_primes{
@@ -27,21 +28,32 @@ sub factor{
my($n) = @_;
my @factors = ();
for my $j (2 .. sqrt($n)){
+ if($j**2 == $n){
+ push @factors, [$j, $j] if $j**2 == $n;
+ next;
+ }
push @factors, [$j, $n / $j] if $n % $j == 0;
}
return @factors;
}
-semiprime{
- my($n) = @_;
- my @primes = get_primes;
+sub semiprime{
+ my($n, $primes) = @_;
my @factors = factor($n);
return false if @factors != 1;
- my @prime_factors = grep {$factors[0]->[0] == $_ || $factors[0]->[1] == $_} @primes;
- return false if @prime_factors != 2;
- return true;
+ my @prime_factors = grep {$factors[0]->[0] == $_ || $factors[0]->[1] == $_} @{$primes};
+ return true if @prime_factors == 2 || $prime_factors[0]**2 == $n;
+ return false;
+}
+
+sub semiprime_n{
+ my @primes = get_primes;
+ for my $n (1 .. N){
+ print "$n " if semiprime($n, \@primes);
+ }
+ print "\n";
}
MAIN:{
- semiprime_100;
+ semiprime_n;
}
diff --git a/challenge-144/adam-russell/perl/ch-2.pl b/challenge-144/adam-russell/perl/ch-2.pl
index ad275c0103..ad8871c2c6 100644
--- a/challenge-144/adam-russell/perl/ch-2.pl
+++ b/challenge-144/adam-russell/perl/ch-2.pl
@@ -1,16 +1,60 @@
use strict;
use warnings;
##
-#
+# You are given two positive numbers, $u and $v. Write a script to generate the
+# Ulam Sequence having at least 10 Ulam numbers where $u and $v are the first two
+# Ulam numbers.
##
-
use constant ULAM_LIMIT => 10;
sub ulam{
my($u, $v) = @_;
-
+ my %pairs;
+ my @ulam = ($u, $v);
+ my $w = $u + $v;
+ push @ulam, $w;
+ $pairs{"$u,$v"} = $w;
+ $pairs{"$u,$w"} = $u + $w;
+ $pairs{"$v,$w"} = $v + $w;
+ do{
+ my @sums = sort {$a <=> $b} grep{my $sum = $_; my @values = grep{$sum == $_} values %pairs; $sum if @values == 1 && $sum > $ulam[@ulam - 1]} values %pairs;
+ my $u = $sums[0];
+ push @ulam, $u;
+ for my $pair (keys %pairs){
+ my($s, $t) = split(/,/, $pair);
+ $pairs{"$s,$u"} = $s + $u;
+ $pairs{"$t,$u"} = $t + $u;
+ }
+ }while(@ulam < ULAM_LIMIT);
+ return @ulam;
}
MAIN:{
- ulam(1, 2);
+ my @ulam;
+ @ulam = ulam(1, 2);
+ {
+ print shift @ulam;
+ print ", ";
+ redo if @ulam > 1;
+ }
+ print shift @ulam;
+ print "\n";
+
+ @ulam = ulam(2, 3);
+ {
+ print shift @ulam;
+ print ", ";
+ redo if @ulam > 1;
+ }
+ print shift @ulam;
+ print "\n";
+
+ @ulam = ulam(2, 5);
+ {
+ print shift @ulam;
+ print ", ";
+ redo if @ulam > 1;
+ }
+ print shift @ulam;
+ print "\n";
}
diff --git a/challenge-144/adam-russell/prolog/ch-1.p b/challenge-144/adam-russell/prolog/ch-1.p
deleted file mode 100644
index e69de29bb2..0000000000
--- a/challenge-144/adam-russell/prolog/ch-1.p
+++ /dev/null
diff --git a/challenge-144/adam-russell/prolog/ch-2.p b/challenge-144/adam-russell/prolog/ch-2.p
deleted file mode 100644
index e69de29bb2..0000000000
--- a/challenge-144/adam-russell/prolog/ch-2.p
+++ /dev/null