- 论坛徽章:
- 8
|
本帖最后由 xiumu2280 于 2014-11-23 10:34 编辑
- use strict;
- use warnings;
- use Storable qw(dclone);
- my @data = map {[$_->[0],[[$_->[1],$_->[2]]],[$_->[3]]]}map {chomp;[split /\s+|-/,$_]}<DATA>;
- for my $f (@data) {
- next if $f->[1][0][0] ne 1;
- all_result($f,\@data);
- }
- sub all_result {
- my ($ori_o,$data) = @_;
- my $ori = dclone($ori_o);
- for my $s (@{$data}) {
- if ($ori_o->[0] eq $s->[0] && ($ori_o->[1][-1][1]+1) eq $s->[1][0][0]) {
- push @{$ori->[1]},$s->[1][0];
- push @{$ori->[2]},@{$s->[2]};
- all_result($ori,$data);
- $ori = dclone($ori_o);
- }
- }
- if ($ori_o->[1][-1][1] eq 100) {
- my @mm;
- for my $m (@{$ori_o->[1]}) {
- push @mm,join "-",@$m;
- }
- my $m_l = join ",",@mm;
- my $e_l = join "",@{$ori_o->[-1]};
- print "$ori_o->[0]\t$m_l\t$e_l\n";
- return;
- }
- }
- __DATA__
- a 1-30 A
- a 9-30 B
- a 31-70 D
- a 31-100 F
- a 71-100 U
- b 1-50 J
- b 1-90 K
- b 51-100 JK
- c 1-20 ll
- c 21-99 L
复制代码 写的比较绕,不过应该可以实现
|
|