fork download
  1. class Range(object):
  2. def __init__(self, begin, end):
  3. self.begin=begin
  4. self.end=end
  5.  
  6. def __repr__(self):
  7. return "(%d,%d)" %(self.begin, self.end)
  8.  
  9. def merge_adiacent(ranges, start):
  10. first = ranges[start]
  11. second = ranges[start+1]
  12. if first.end >= second.begin:
  13. ranges[start]=Range(first.begin, first.end if first.end > second.end else second.end)
  14. ranges.pop(start+1)
  15. return True
  16. return False
  17.  
  18. def compress(ranges_list):
  19. sorted_ranges = sorted(ranges_list, cmp=lambda range1, range2: cmp(range1.begin, range2.begin))
  20. current = 0
  21. for i in range(len(sorted_ranges)-1):
  22. if not merge_adiacent(sorted_ranges, current):
  23. current+=1
  24. return sorted_ranges
  25.  
  26. def main():
  27. ranges = [Range(5, 8), Range(-3, 2), Range(13, 15), Range(5, 12), Range(6, 7)]
  28. print(compress(ranges))
  29.  
  30. main()
Success #stdin #stdout 0.01s 7852KB
stdin
Standard input is empty
stdout
[(-3,2), (5,12), (13,15)]