Okay. Now we have the OPs clarification, the output from my code consolidating equal valued intervals is:
C:\test>935755 935755.dat
[
["010005", "010022", 41],
["010023", "012359", 0],
["020000", "022359", 0],
["030000", "032359", 0],
["040000", "042359", 0],
["050000", "052359", 0],
["060000", "062359", 0],
["070000", "072359", 0],
["080000", "082359", 0],
["090000", "092359", 0],
[100000, 102359, 0],
[110000, 112359, 0],
[120000, 122359, 0],
[130000, 132359, 0],
[140000, 142359, 0],
[150000, 152359, 0],
[160000, 162359, 0],
[170000, 172359, 0],
[180000, 182359, 0],
[190000, 192359, 0],
[200000, 202359, 0],
[210000, 212359, 0],
[220000, 222359, 0],
[230000, 232359, 0],
[240000, 242359, 0],
[250000, 252359, 0],
[260000, 262359, 0],
[270000, 272359, 0],
[280000, 282359, 0],
[290000, 292359, 0],
[300000, 302359, 0],
[310000, 312356, 0],
[312357, 312359, 27],
]
Do you concur?
The (now simplified) code for this is: #! 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 = (
# ['010000','010010',2],['010200','010210',5],['012359','020001',3]
+,
# ['010005','010015',1],['010207','010211',4]
#);
my @data = map[ split ], <>;
my @expd = map {
my $in = $_;
my $s = dhm2int( $in->[ 0 ] );
my $e = dhm2int( $in->[ 1 ] );
my @out;
while( int( $s / 1440 ) != int( $e / 1440 ) ) {
my $newe = ( int( $s / 1440 ) +1 ) * 1440 -1;
push @out, [ $s, $newe, $in->[2] ];
$s = $newe +1;
}
( @out, [ $s, $e, $in->[2] ] );
} @data;
my( @tally );
for my $e ( 0 .. $#expd ) {
my $r = $expd[ $e ];
for my $i ( $r->[ 0 ] .. $r->[ 1 ] ) {
if( !defined( $tally[ $i ] ) or $tally[ $i ] > $r->[ 2 ] ) {
$tally[ $i ] = $r->[ 2 ];
}
}
}
my @res;
my $i = 0;
while( $i < $#tally ) {
++$i until defined $tally[ $i ];
my $val = $tally[ $i ];
my $start = $i++;
++$i while defined( $tally[ $i ] ) and $tally[ $i ] == $val and $i
+ % 1440;
my $end = $i - 1;
push @res, [ int2dhm( $start ), int2dhm( $end ), $val ];
}
pp \@res;
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|