Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- proc intervalInsert(intervals: var seq[tuple], interval: tuple) =
- var i = -1
- var a = interval[0]
- var b = interval[1]
- var ni = (0, 0)
- var last: int
- var pos = -1
- while i < intervals.len:
- inc(i)
- var min = intervals[i][0]
- var max = intervals[i][1]
- if pos == -1:
- if a > max: continue
- elif a >= min and a <= max:
- ni[0] = min
- elif a > min:
- ni[0] = a
- pos = i
- else:
- if b > max:
- continue
- elif b >= min and b <= max:
- ni[1] = max
- elif b < min:
- ni[1] = b
- last = i
- break
- for d in countdown(last, pos):
- intervals.delete(d)
- intervals.insert(ni, pos)
- var ivals = @[(1, 3), (6, 9)]
- var nival = (2, 5)
- echo ivals, " ", nival
- ivals.intervalInsert(nival)
- echo ivals
- ivals = @[(1,2),(3,5),(6,7),(8,10),(12,16)]
- nival = (4, 8)
- echo ivals, " ", nival
- ivals.intervalInsert(nival)
- echo ivals
- #output -> ((1,5), (6,9))
- #[
- ((a1,b1), (a2,b2), (an, bn))
- (a, b)
- loop thru interval list where n is current value and is either a min or max
- if a > n then continue else
- if a is min then
- if a is max then
- if a inrange of an, bn
- then find
- where b falls in interval list
- check every number, n, in the interval list
- if passed interval delete interval
- if b <= n
- if n is min
- when is inrange of an, bn
- ]#
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement