Skip to content

Instantly share code, notes, and snippets.

@gchiam
Created March 14, 2019 15:29
Show Gist options
  • Save gchiam/4b428e125399d1454438a6bdfc2998d2 to your computer and use it in GitHub Desktop.
Save gchiam/4b428e125399d1454438a6bdfc2998d2 to your computer and use it in GitHub Desktop.
import functools
def merge_or_append(ranges, element):
if ranges and ranges[-1][0] <= element[0] <= ranges[-1][1]:
ranges[-1] = (ranges[-1][0], max(ranges[-1][1], element[1]))
else:
ranges.append(element)
return ranges
def merge(ranges):
if not ranges or len(ranges) == 1:
return ranges
sorted_ranges = sorted(ranges)
result = [sorted_ranges[0]]
for element in sorted_ranges[1:]:
merge_or_append(result, element)
return result
def merge_reduce(ranges):
if not ranges or len(ranges) == 1:
return ranges
return functools.reduce(merge_or_append, sorted(ranges), [])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment