Here's a very straightforward version that implements
"given a 7-min timer & a 4-min egg timer"
rather than
"given unlimited 7-min timers & unlimited 4-min egg timers
It's unclear what the OP intended.
use List::Util qw( min );
use List::MoreUtils qw( any );
my $target = 5;
my @max = (7, 4);
my $time = 0;
my @status = (0) x @max;
my %seen;
for (;;) {
die("Unable to solve the problem\n")
if $seen{join('|', @status)}++;
foreach (0..$#status) {
next if $status[$_];
$status[$_] = $max[$_];
print("$time: begin $max[$_]\n");
}
last if any { $_ == $target } @status;
my $elapsed_time = min(@status);
$status[$_] = $status[$_] - $elapsed_time
foreach 0..$#status;
$time += $elapsed_time;
}
print("$time: begin cooking\n");
$time += $target;
print("$time: end cooking\n");
outputs
0: begin 7
0: begin 4
4: begin 4
7: begin 7
8: begin 4
12: begin 4
14: begin 7
16: begin 4
16: begin cooking
21: end cooking
I don't support putting the timer's on hold, but that's just laziness on my end :)
.oO( Why aren't Scalar::Util, List::Util and List::MoreUtils core modules? I wouldn't mind if the function in those modules were core functions! )
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|