Unfortunately, tachyon's code doesn't work for many cases.
#! perl -sw
use strict;
my @array = (
[ '03:30', '05:45' ],
[ '05:45', '09:15' ],
[ '10:00', '11:35' ],
[ '10:00', '10:01' ],
[ '11:00', '15:40' ]
);
sub hhmm2min {
die "Data error $_[0] not in format HH:MM\n" unless $_[0] =~ m/(\d
+\d):(\d\d)/;
return $1*60+$2;
}
sub min2hhmm {
die "Data error $_[0] > 24:00\n" if $_[0] > 24*60;
return sprintf "%02d:%02d", int($_[0]/60), $_[0]%60;
}
@array = sort{
$a->[0] <=> $b->[0]
}map{
[ hhmm2min($_->[0]), hhmm2min($_->[1]) ]
}@array;
my $cur = 0;
my @missing = ();
for my $r( @array ) {
push @missing, [ min2hhmm($cur), min2hhmm( $r->[0] ) ] if $cur < $
+r->[0];
$cur = $r->[1];
}
push @missing, [ min2hhmm($cur), '24:00' ] unless $cur == 24*60;
use Data::Dumper;
print Dumper \@missing;
__END__
P:\test>test
$VAR1 = [
[
'00:00',
'03:30'
],
[
'09:15',
'10:00'
],
[
'10:01',
'11:00'
],
[
'15:40',
'24:00'
]
];
Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
|