免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4384 | 回复: 0
打印 上一主题 下一主题

perl区间交集 [复制链接]

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
1 [报告]
发表于 2013-12-25 19:51 |显示全部楼层
回复 1# 清泉一边1
  1. #/usr/bin/env perl

  2. use strict;
  3. use Data::Dumper;

  4. my %h;

  5. while(<DATA>){
  6.     chomp;
  7.     my @a = split;
  8.     my $k = substr($a[0],0,1)."\t".$a[3];
  9.     $h{$k}{min} = $a[4] if $h{$k}{min} > $a[4] or ! defined $h{$k}{min};
  10.     $h{$k}{$a[4]} = $a[5];
  11. }
  12. my %max;
  13. my %min;
  14. my $start;
  15. my $end;
  16. foreach my $k(keys %h){
  17.     foreach my $t (sort{$a<=>$b}grep{/\d/}keys %{$h{$k}}){
  18.         if($t == $h{$k}{min} || $t > $max{$k}{$start}->[-1]){
  19.             $max{$k}{$t} = [$t,$h{$k}{$t}];
  20.             $min{$k}{$t} = [$h{$k}{$t}-$t,$t."-".$h{$k}{$t}];
  21.             $start = $t;
  22.         }elsif($t <= $max{$k}{$start}->[-1] ){  
  23.             $min{$k}{$start} = [$end-$t,$t."-".$end] if $min{$k}{$start}->[0] > ($end-$t);
  24.                         $max{$k}{$start} = [$start,$h{$k}{$t}] if $h{$k}{$t} > $max{$k}{$start}->[-1];
  25.         }
  26.                 $end = $h{$k}{$t};
  27.     }
  28. }

  29. print "Max Gap\n";
  30. foreach my $k (keys %max){
  31.         print $k,"\t";
  32.         print join "_",map{join "-",@{$max{$k}{$_}}}(sort{$a<=>$b}keys %{$max{$k}});
  33.         print "\n";
  34. }
  35. print "Min Gap\n";
  36. foreach my $k (keys %min){
  37.         print $k,"\t";
  38.         print join "_",map{@{$min{$k}{$_}}[1]}(sort{$a<=>$b}keys %{$min{$k}});
  39.         print "\n";
  40. }


  41. __DATA__
  42. a.1        1        3        1_b        2        8
  43. a.2        2        5        1_b        5        9
  44. a.3        3        6        1_b        4        7
  45. a.4        2        4        1_b        12        15
  46. c.1        3        8        1_d        1        7
  47. c.2        4        8        1_d        6        8

  48. -----output-----
  49. Max Gap
  50. a       1_b     2-9_12-15
  51. c       1_d     1-8
  52. Min Gap
  53. a       1_b     5-7_12-15
  54. c       1_d     6-7

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP