- 论坛徽章:
- 2
|
回复 1# 清泉一边1 - #/usr/bin/env perl
- use strict;
- use Data::Dumper;
- my %h;
- while(<DATA>){
- chomp;
- my @a = split;
- my $k = substr($a[0],0,1)."\t".$a[3];
- $h{$k}{min} = $a[4] if $h{$k}{min} > $a[4] or ! defined $h{$k}{min};
- $h{$k}{$a[4]} = $a[5];
- }
- my %max;
- my %min;
- my $start;
- my $end;
- foreach my $k(keys %h){
- foreach my $t (sort{$a<=>$b}grep{/\d/}keys %{$h{$k}}){
- if($t == $h{$k}{min} || $t > $max{$k}{$start}->[-1]){
- $max{$k}{$t} = [$t,$h{$k}{$t}];
- $min{$k}{$t} = [$h{$k}{$t}-$t,$t."-".$h{$k}{$t}];
- $start = $t;
- }elsif($t <= $max{$k}{$start}->[-1] ){
- $min{$k}{$start} = [$end-$t,$t."-".$end] if $min{$k}{$start}->[0] > ($end-$t);
- $max{$k}{$start} = [$start,$h{$k}{$t}] if $h{$k}{$t} > $max{$k}{$start}->[-1];
- }
- $end = $h{$k}{$t};
- }
- }
- print "Max Gap\n";
- foreach my $k (keys %max){
- print $k,"\t";
- print join "_",map{join "-",@{$max{$k}{$_}}}(sort{$a<=>$b}keys %{$max{$k}});
- print "\n";
- }
- print "Min Gap\n";
- foreach my $k (keys %min){
- print $k,"\t";
- print join "_",map{@{$min{$k}{$_}}[1]}(sort{$a<=>$b}keys %{$min{$k}});
- print "\n";
- }
- __DATA__
- a.1 1 3 1_b 2 8
- a.2 2 5 1_b 5 9
- a.3 3 6 1_b 4 7
- a.4 2 4 1_b 12 15
- c.1 3 8 1_d 1 7
- c.2 4 8 1_d 6 8
- -----output-----
- Max Gap
- a 1_b 2-9_12-15
- c 1_d 1-8
- Min Gap
- a 1_b 5-7_12-15
- c 1_d 6-7
复制代码 |
|