| 1234567891011121314151617181920212223242526 |
- #!/usr/bin/env python3
- import re
- import sys
- def parse(f):
- for i, line in enumerate(f):
- nr, size, time, pos = map(int, re.findall(r'\d+', line))
- assert nr == i + 1
- assert time == 0
- yield size, pos
- def is_range(seq):
- return all(seq[i] - seq[i - 1] == 1 for i in range(1, len(seq)))
- def button_time(discs):
- sizes, positions = zip(*discs)
- desired = tuple(-(delay + 1) % size for delay, size in enumerate(sizes))
- time = 0
- while positions != desired:
- positions = tuple((p + 1) % s for s, p in zip(sizes, positions))
- time += 1
- return time
- discs = list(parse(sys.stdin))
- print(button_time(discs))
- print(button_time(discs + [(11, 0)]))
|