#! perl -slw use strict; use Data::Dump qw[ pp ]; sub dhm2int { my( $d, $h, $m ) = unpack '(A2)*', $_[0]; return ( ( $d - 1 ) * 24 + $h ) * 60 + $m; } sub int2dhm { sprintf "%02d%02d%02d", int($_[0]/1440)+1, int($_[0]/60)%24, $_[0]%60; } my @data = sort{ $b->[2] <=> $a->[2] } map[ split ], <>; my $tally = chr(255) x ( 31*24*60 ); for my $d ( @data ) { my $s = dhm2int( $d->[0] ); my $e = dhm2int( $d->[1] ); substr( $tally, $s, $e-$s+1, chr( $d->[2] ) x ( $e - $s + 1 ) ); } my @res; my $i = 0; while( $i < length( $tally ) ) { ++$i until vec( $tally, $i, 8 ) != 255; my $val = vec( $tally, $i, 8 ); my $start = $i++; ++$i while $i % 1440 and vec( $tally, $i, 8 ) == $val; my $end = $i - 1; push @res, [ int2dhm( $start ), int2dhm( $end ), $val ]; } pp \@res;