aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Pankoff <ccntrq@screenri.de>2021-12-26 13:09:55 +0100
committerAlexander Pankoff <ccntrq@screenri.de>2021-12-26 13:09:55 +0100
commit81a8cccb2b7e807919ba30c5fc89df38216afcb4 (patch)
tree9ef2505bbcd0d011aaa4fef59b938f80ae607583
parent1aa8ecccec917bbdee515fef036e8f84c47dae22 (diff)
downloadperlweeklychallenge-club-81a8cccb2b7e807919ba30c5fc89df38216afcb4.tar.gz
perlweeklychallenge-club-81a8cccb2b7e807919ba30c5fc89df38216afcb4.tar.bz2
perlweeklychallenge-club-81a8cccb2b7e807919ba30c5fc89df38216afcb4.zip
Add solutions for challenge-144
-rwxr-xr-xchallenge-144/alexander-pankoff/perl/ch-1.pl31
-rwxr-xr-xchallenge-144/alexander-pankoff/perl/ch-2.pl51
2 files changed, 82 insertions, 0 deletions
diff --git a/challenge-144/alexander-pankoff/perl/ch-1.pl b/challenge-144/alexander-pankoff/perl/ch-1.pl
new file mode 100755
index 0000000000..700e4beb3b
--- /dev/null
+++ b/challenge-144/alexander-pankoff/perl/ch-1.pl
@@ -0,0 +1,31 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use feature qw'say signatures';
+no warnings qw'experimental::signatures';
+
+use File::Spec;
+use FindBin;
+use List::Util qw(all);
+
+package Challenge143Task02 {
+ require File::Spec->catfile( $FindBin::RealBin,
+ qw'.. .. .. challenge-143 alexander-pankoff perl ch-2.pl' );
+}
+
+run() unless caller();
+
+sub run() {
+ say join( " ", grep { is_semi_prime($_) } 1 .. 100 );
+}
+
+sub is_semi_prime($n) {
+ my @pairs = Challenge143Task02::find_divisors_pairs($n);
+ return @pairs == 2 && all { is_prime($_) } @{ $pairs[1] };
+}
+
+sub is_prime($n) {
+ return $n > 1
+ && Challenge143Task02::find_divisors_pairs($n) == 1;
+}
+
diff --git a/challenge-144/alexander-pankoff/perl/ch-2.pl b/challenge-144/alexander-pankoff/perl/ch-2.pl
new file mode 100755
index 0000000000..34c0bc8674
--- /dev/null
+++ b/challenge-144/alexander-pankoff/perl/ch-2.pl
@@ -0,0 +1,51 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use feature qw'say signatures';
+no warnings qw'experimental::signatures';
+
+use File::Spec;
+use FindBin;
+use List::Util qw(min sum);
+
+use constant DEBUG => $ENV{DEBUG} // 0;
+
+package Challenge141Task02 {
+ require File::Spec->catfile( $FindBin::RealBin,
+ qw'.. .. .. challenge-141 alexander-pankoff perl ch-2.pl' );
+}
+
+run() unless caller();
+
+sub run() {
+ my $u = Challenge141Task02::prompt_for_integer('u');
+
+ my $v;
+ do {
+ $v = Challenge141Task02::prompt_for_integer('v');
+ } while ( $v <= $u && say("'v' must be greater than 'u' ($u)") );
+
+ say join( ', ', generate_ulam_sequence( $u, $v ) );
+}
+
+sub generate_ulam_sequence ( $u, $v, $length = 10 ) {
+ my @sequence = ( $u, $v );
+ my @sums = ( $u + $v );
+
+ while ( @sequence < $length ) {
+ @sums = grep { $_ > $sequence[-1] } @sums;
+ my @unique_sums = remove_dupes(@sums);
+ my $new = min(@unique_sums);
+ push @sums, ( map { $_ + $new } @sequence );
+ push @sequence, $new;
+ }
+
+ return @sequence;
+}
+
+sub remove_dupes(@xs) {
+ my %count;
+ $count{$_}++ for @xs;
+ return grep { $count{$_} == 1 } keys %count;
+}
+