#!/usr/bin/env python samples = [ [[[1,3],[3,6]],5], [[[10,14],[4,18],[19,20],[19,20],[13,20]],16] ] def answer(intervals): """Calculate the total number of units covered by the supplied collection of intervals""" while True: changed, intervals = iterate(intervals) if not changed: break covered = 0 for interval in intervals: covered += interval[1] - interval[0] return covered def iterate(intervals): ranges = [intervals.pop(0)] changed = False while (len(intervals)>0): interval = intervals.pop() merged = False for i in range(0,len(ranges)): if overlaps(interval,ranges[i]): ranges[i] = merge(ranges[i],interval) merged = True changed = True if not merged: ranges.append(interval) return changed, ranges def overlaps(a,b): if (a[0]b[0]): return True else: return False def merge(a,b): return [min(a[0],b[0]),max(a[1],b[1])] for sample in samples: print answer(sample[0]) print sample[1]