基于python的靶场接口设计与实现

2024-09-28 01:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

1:添加范围-跟踪提供的输入范围。添加与当前跟踪范围部分重叠的范围应跟踪添加范围中尚未跟踪的任何数字

e.g. AddRange(10,180)- start tracking range 10-180
AddRange(150,200)- start tracking range 150-200
AddRange(250,500) - start tracking range 250-500

可能的解决方案

def merge_ranges(ranges):
    ranges = iter(sorted(ranges))
    current_start, current_stop = next(ranges)
    for start, stop in ranges:
        if start > current_stop:
        # Gap between segments: output current segment and start a new one.
            yield current_start, current_stop
            current_start, current_stop = start, stop
        else:
        # Segments adjacent or overlapping: merge.
            current_stop = max(current_stop, stop)
    yield current_start, current_stop

2:删除范围:从被钉的数字中删除提供的数字范围。对于部分跟踪范围的删除范围操作应删除该范围中已跟踪的所有数字

e.g. Ranges tracked [10-200],[250-500]

RemoveRange(50,150) - stop tracking range 50-150 ([10-149], [151-200],[250-500])
RemoveRange(400,600) - stop tracking range 400-500 ([10-49],[250-399])
Remove range(600,800) - no-op as none of the ranges were tracked

可能的解决方案

def remove_overlap(rs):
    rs.sort()
    def process (rs,deviation):
        start = len(rs) - deviation - 1
        if start < 1:
            return rs
        if rs[start][0] > rs[start-1][1]:
            return process(rs,deviation+1)
        else:
            rs[start-1] = ((rs[start][0],rs[start-1][0])[rs[start-1][0] < rs[start][0]],(rs[start][1],rs[start-1][1])[rs[start-1][1] > rs[start][1]])
            del rs[start]
            return process(rs,0)
    return process(rs,0)

3查询范围:如果整个范围都在跟踪,则返回true;否则为假

e.g QueryRange(50,100) - returns True
QueryRange(180,300) - returns False (only part of the range is being tracked)
QueryRange (600,100)- returns False(not tracked at all)

如何实现这个?

此外,还需要以面向对象的方式实现整个过程:

伪代码:

class RangeModule:
    def AddRange(self, lower, upper):
        pass

    def QueryRange(self, lower, upper):
        return True

    def RemoveRange(self, lower, upper):
        pass

Tags: returnifdefrange数字currentprocessstart
1条回答
网友
1楼 · 发布于 2024-09-28 01:26:26

保持按起点排序的成对(范围)列表。您有责任确保范围不重叠,并且它们彼此不相邻-如果相邻,则合并它们

因为它们是排序的,并且不重叠,所以可以快速找到与输入范围重叠的部分。使用此选项可以处理添加、查询和删除

相关问题 更多 >

    热门问题