b.py (480B)
1 import fileinput 2 3 def overlap(r1, r2): 4 return min(r1[1], r2[1]) >= max(r1[0], r2[0]) 5 6 def fuse(r1, r2): 7 return (min(r1[0], r2[0]), max(r1[1], r2[1])) 8 9 ranges = [] 10 with fileinput.input() as lines: 11 for line in lines: 12 if line == '\n': 13 break 14 i = line.find('-') 15 ranges.append((int(line[:i]), int(line[i+1:-1]))) 16 17 s = set() 18 for r in ranges: 19 c = r 20 for rr in list(s): 21 if overlap(c, rr): 22 c = fuse(c, rr) 23 s.remove(rr) 24 s.add(c) 25 26 print(sum(r[1] - r[0] + 1 for r in s))