diff options
| author | Abigail <abigail@abigail.freedom.nl> | 2021-12-21 01:20:47 +0100 |
|---|---|---|
| committer | Abigail <abigail@abigail.freedom.nl> | 2021-12-21 01:20:47 +0100 |
| commit | 55672727e94158136846b2d99c8d7576c11e1dac (patch) | |
| tree | 8bd3356cd655c06732c5110af0add555de4fa348 | |
| parent | 11bec869bb9269ab76e427e90a5d6d367bfdc41c (diff) | |
| download | perlweeklychallenge-club-55672727e94158136846b2d99c8d7576c11e1dac.tar.gz perlweeklychallenge-club-55672727e94158136846b2d99c8d7576c11e1dac.tar.bz2 perlweeklychallenge-club-55672727e94158136846b2d99c8d7576c11e1dac.zip | |
Simplified
| -rw-r--r-- | challenge-144/abigail/perl/ch-2.pl | 31 |
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 <>; |
