I'd convert the times to seconds, and then do something like this:
$ cat t.pl #!/usr/bin/perl use strict; use warnings; use Data::Dumper; ### Get a list of picture times, in seconds my @times; push @times, int 150*rand for 0 .. 30; ### Sort them @times = sort { $a<=>$b } @times; ### Group together the pix whose time is less than MAX_TIME_DIFF secon +ds ### apart my $MAX_TIME_DIFF=10; # Minimum time between photos my $MIN_GRP_SIZE=3; # Minimum "interesting" group size my @groups; my $cur_group = [ shift @times ]; while (@times) { if ($$cur_group[-1]+$MAX_TIME_DIFF >= $times[0]) { # small interval, add to current group push @$cur_group, shift @times; } else { # store last group (if interesting) and start # a new one. push @groups, $cur_group if @$cur_group >= $MIN_GRP_SIZE; $cur_group = [ shift @times ]; } } print Dumper(\@groups); $ perl t.pl $VAR1 = [ [ 32, 36, 39, 39, 40, 42, 48, 53, 55, 56, 57, 58, 59 ], [ 72, 73, 77, 82 ], [ 93, 103, 104, 105, 108, 111, 113, 113, 114, 116 ] ];
...roboticus
When your only tool is a hammer, all problems look like your thumb.
In reply to Re: Group file per time interval
by roboticus
in thread Group file per time interval
by raiten
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |