【发布时间】:2017-06-07 09:25:37
【问题描述】:
第二列和第三列中的数字指定了一个范围。我想要的是(如果第一列中的数字相同)计算重叠区域,并计算由右侧数字确定的范围内获得或损失的数量(+1 = 获得一个,-1 =一个丢了)。 例如,如果我有
1 0 300 +2
1 100 200 -1
2 100 200 -1
这意味着我实际上有
1 0 100 +2
1 100 200 +1
1 200 300 +2
2 100 200 -1
因为1 100 200 与1 0 300 重叠创建0 100 +2、100 200 +1 和200 300 +2 但2 100 200 没有重叠并且只是打印出2 100 200 -1
示例输入
1 0 5000 +1
1 100 400 -1
1 300 500 +2
1 1000 1200 +3
1 1000 1100 -2
1 0 50 -1
预期结果
1 50 100 +1
1 300 400 +1
1 400 500 +3
1 1000 1100 -1
1 1100 1200 +2
1 1200 5000 +1
如何实现这一点的某种伪代码会很好
但适合我的语言是 bash、perl、awk 或 sed
【问题讨论】:
-
你写过什么吗?
-
@codeforester 我没有,我想不出我可以如何操纵数字来做到这一点
-
为什么 300 - 400 “+1”?我得到了 +2。
-
@choroba:我同意。它仅在前三个范围内:0 .. 5000 (+1)、100 .. 400 (-1) 和 300 .. 500 (+2)。总数为 +2。