···11import re
22import fileinput
33-import itertools
43from utils import parse_line
546576def button_timing(discs):
87 """Returns the first time at which the button should be pressed."""
99- for i in itertools.count():
88+ largest_disc = max(discs)
99+ stride, initial_pos = largest_disc
1010+ disc_num = discs.index(largest_disc) + 1
1111+1212+ i = (stride - initial_pos - disc_num) % stride
1313+1414+ while True:
1015 for time, (positions, initial) in enumerate(discs, start=i+1):
1116 if (initial + time) % positions != 0:
1217 break
1318 else:
1419 return i
2020+2121+ i += stride
152216231724DISCS = []
···2229 DISCS.append(disc)
23302431print "Timing to press button:", button_timing(DISCS)
2525-print "Timing with added disc:", button_timing(DISCS + [(11, 0)])
3232+print "Timing with added disc:", button_timing(DISCS + [[11, 0]])