on Wed, 29 May 2002 23:58:19 GMT, [EMAIL PROTECTED] (Bryan
R Harris) wrote:
>
> I'm trying to come up with an algorithm that seems like it ought
> to be really easy, but it's turning out to be pretty tough...
>
> Basically I have three pairs of start/stop times, e.g.:
>
> 3, 5
> 4, 10
> 15, 20
>
> I want the total time covered by all these ranges. I can't just
> say (5-3 + 10-4 + 20-15) because the 3,5 and 4,10 ranges overlap.
> The desired answer for this case is 13, 3 to 10 and 15 to 20. I
> have the start times in two arrays, @starts and @stops.
If the start/stop pairs are integers (as shown in your example), you
could stuff a time-slot array. Using Beau's testdata and notation:
#! perl -w
use strict;
my @starts = (3, 4, 15, 16);
my @stops = (5, 10, 20, 19);
my @time_slots = ();
for (my $i=0; $i<@starts; $i++) {
$time_slots[$_] = 1 for ( $starts[$i] .. $stops[$i] - 1 );
}
my $elapsed = 0;
for (@time_slots) {
$elapsed++ if $_;
}
print "elapsed = $elapsed\n";
--
felix
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]