15_discs.py 707 B

1234567891011121314151617181920212223242526
  1. #!/usr/bin/env python3
  2. import re
  3. import sys
  4. def parse(f):
  5. for i, line in enumerate(f):
  6. nr, size, time, pos = map(int, re.findall(r'\d+', line))
  7. assert nr == i + 1
  8. assert time == 0
  9. yield size, pos
  10. def is_range(seq):
  11. return all(seq[i] - seq[i - 1] == 1 for i in range(1, len(seq)))
  12. def button_time(discs):
  13. sizes, positions = zip(*discs)
  14. desired = tuple(-(delay + 1) % size for delay, size in enumerate(sizes))
  15. time = 0
  16. while positions != desired:
  17. positions = tuple((p + 1) % s for s, p in zip(sizes, positions))
  18. time += 1
  19. return time
  20. discs = list(parse(sys.stdin))
  21. print(button_time(discs))
  22. print(button_time(discs + [(11, 0)]))