diff options
| author | Adam Russell <ac.russell@live.com> | 2021-12-26 16:40:58 -0500 |
|---|---|---|
| committer | Adam Russell <ac.russell@live.com> | 2021-12-26 16:40:58 -0500 |
| commit | 7bf58f9c0a23a7d8b6b98c8b2419f9f320eedac1 (patch) | |
| tree | 4e269839e1957bf072d9201f233307f76faf450f | |
| parent | 5657ff55c37e028b0c8a2a6388d86e2c4bfedc85 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-144/adam-russell/blog1.txt | 0 | ||||
| -rw-r--r-- | challenge-144/adam-russell/cxx/ch-1.cxx | 0 | ||||
| -rw-r--r-- | challenge-144/adam-russell/cxx/ch-2.cxx | 0 | ||||
| -rw-r--r-- | challenge-144/adam-russell/perl/ch-1.pl | 28 | ||||
| -rw-r--r-- | challenge-144/adam-russell/perl/ch-2.pl | 52 | ||||
| -rw-r--r-- | challenge-144/adam-russell/prolog/ch-1.p | 0 | ||||
| -rw-r--r-- | challenge-144/adam-russell/prolog/ch-2.p | 0 |
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 |
