aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.freedom.nl>2021-12-21 01:20:47 +0100
committerAbigail <abigail@abigail.freedom.nl>2021-12-21 01:20:47 +0100
commit55672727e94158136846b2d99c8d7576c11e1dac (patch)
tree8bd3356cd655c06732c5110af0add555de4fa348
parent11bec869bb9269ab76e427e90a5d6d367bfdc41c (diff)
downloadperlweeklychallenge-club-55672727e94158136846b2d99c8d7576c11e1dac.tar.gz
perlweeklychallenge-club-55672727e94158136846b2d99c8d7576c11e1dac.tar.bz2
perlweeklychallenge-club-55672727e94158136846b2d99c8d7576c11e1dac.zip
Simplified
-rw-r--r--challenge-144/abigail/perl/ch-2.pl31
1 files changed, 12 insertions, 19 deletions
diff --git a/challenge-144/abigail/perl/ch-2.pl b/challenge-144/abigail/perl/ch-2.pl
index c682d7a525..d9dbb97da3 100644
--- a/challenge-144/abigail/perl/ch-2.pl
+++ b/challenge-144/abigail/perl/ch-2.pl
@@ -20,31 +20,24 @@ use List::Util qw [min];
#
sub ulam ($u1, $u2) {
- die unless $u1 > 0 && $u2 > 0 && $u1 != $u2
- && $u1 == int $u1 && $u2 == int $u2;
- ($u1, $u2) = ($u2, $u1) if $u1 > $u2;
-
- my @seen = ($u1, $u2);
- my %sums;
- $sums {$u1 + $u2} = 1;
- my %todo = ($u1 + $u2, 1);
-
- while (%todo) {
- my $next = min keys %todo;
- delete $todo {$next};
- next if $sums {$next} > 1;
+ my @seen = ($u1, $u2);
+ my %sums = ($u1 + $u2, 1);
+
+ my $next;
+ while (%sums) {
+ $next = min keys %sums; # A heap saves a factor N/log N, but
+ # who cares about performance when we
+ # just want to do the first 10 numbers?
+ next if delete $sums {$next} > 1;
push @seen => $next;
return @seen if @seen >= 10;
- foreach my $seen (@seen) {
- next if $seen == $next;
- my $sum = $seen + $next;
- $sums {$sum} ++;
- $todo {$sum} = 1;
- }
+ $_ == $next || $sums {$_ + $next} ++ foreach @seen;
}
}
+
+
$, = ", ";
say ulam /[0-9]+/g while <>;