Ok, well here it is, corrected for that, and without using coderefs for streams. I realized there really wasn't much point to that. All I really need to know is what my multiplier is, and which element of the output stream I'm looking at.
use strict;
use warnings;
sub lazy_ham {
my ($how_many) = @_;
my @output_stream = (1);
my @streams = map [$_,0], (2, 3, 5);
for (@output_stream+1..$how_many) {
# Find the lowest next item in the available streams
my @peeks = map {$output_stream[$_->[1]] * $_->[0]} @streams;
my ($lowest) = sort {$a <=> $b} @peeks;
$peeks[$_] == $lowest and $streams[$_][1]++ for 0..$#streams;
push(@output_stream, $lowest);
}
@output_stream;
}
print join(', ', lazy_ham(80)), "\n";
Caution: Contents may have been coded under pressure.
|