···11+import fileinput
22+from itertools import count
33+44+55+def scanner(height, time):
66+ """Return the position of a given scanner height at a given time."""
77+ offset = time % ((height - 1) * 2)
88+99+ if offset > height - 1:
1010+ return 2 * (height - 1)
1111+ else:
1212+ return offset
1313+1414+1515+HEIGHTS = {}
1616+1717+for line in fileinput.input():
1818+ depth, rnge = [int(x) for x in line.strip().split(': ')]
1919+ HEIGHTS[depth] = rnge
2020+2121+# Part 1
2222+severity = 0
2323+for pos in HEIGHTS:
2424+ if scanner(HEIGHTS[pos], pos) == 0:
2525+ severity += pos * HEIGHTS[pos]
2626+2727+print "Severity of whole trip:", severity
2828+2929+# Part 2
3030+for delay in count():
3131+ for pos in HEIGHTS:
3232+ if scanner(HEIGHTS[pos], delay + pos) == 0:
3333+ break
3434+ else:
3535+ print "Minimal delay to not get caught:", delay
3636+ break