Perl - 确定几个数值范围的交集

jak*_*115 3 perl range overlap

我希望能够加载长整数范围列表,并创建一个新的"汇总"范围列表,它是每对范围的交叉点的并集.而且,我想在Perl中这样做.例如:

Sample ranges: (1..30) (45..90) (15..34) (92..100)

Intersection of ranges: (15..30) 
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法是使用一堆嵌套if语句来确定样本A,样本B,样本C等的起点,并以这种方式找出重叠,但是不可能用数百个样本来做,每个包含许多范围.

任何建议表示赞赏!

ike*_*ami 5

当你需要做一些事情时,你应该做的第一件事是看看CPAN,看看有人已经为你解决了问题的工具.

设置:: IntSpan设置:: IntRange是结果的第一页上CPAN"套"上.


你想要的是每对范围的交集的联合,所以算法如下:

  1. 创建一个空结果集.
  2. 为每个范围创建一个集合.
  3. 对于列表中的每个集合,
    1. 对于列表中的每个后续设置,
      1. 找到这两组的交集.
      2. 找到结果集和此交集的并集.这是新的结果集.
  4. 枚举结果集的元素.