|
- import itertools
- import pathlib
- import re
-
-
- def forward(n, groups):
- for group in groups:
- for b, a, c in group:
- if a <= n < a + c:
- n = n + (b - a)
- break
- return n
-
-
- def backward(n, groups):
- for group in reversed(groups):
- for b, a, c in group:
- if b <= n < b + c:
- n = n - (b - a)
- break
- return n
-
-
- text = open(0).read()
- to_matrix = lambda string: [[int(n) for n in ln.split()] for ln in string.splitlines()]
- [seed], *groups = [to_matrix(string.split(':')[1].strip()) for string in text.split('\n\n')]
-
- ans1 = min([forward(n, groups) for n in seed])
- print(ans1)
-
- ns = []
- pairs = [(a, a + b) for a, b in zip(seed[::2], seed[1::2])]
- for group in reversed(groups):
- ns += [n for b, a, c in group for n in [b, b + c - 1]]
- ns = [backward(n, [group]) for n in ns]
- ans2 = min(forward(n, groups) for n in ns if any(a <= n < b for a, b in pairs))
- print(ans2)
|