Files
python-aoc-2020/day13/part2.py
Sebastian Seedorf cdccbd6155 Day 13 (cleanup)
2020-12-13 18:26:21 +01:00

25 lines
620 B
Python

from functools import reduce
from math import gcd
def lcm(a, b):
return abs(a*b) // gcd(a, b)
# f(n)=an+b and f(m)=xm+y
# Intersection of 2 sequences -> ck+d
def merge(a, b, x, y):
while b != y:
if b < y:
b += a * ((y-b-1) // a + 1)
else:
y += x * ((b-y-1) // x + 1)
return lcm(a, x), b
lines = [x.strip() for x in open("input.txt")]
# f(n) = [interval] * n + [offset] --> (interval, offset)
busses = ((int(x), -idx) for idx, x in enumerate(lines[1].split(',')) if x != 'x')
sequence = reduce(lambda fn, fm: merge(*fn, *fm), busses, (1, 0))
print(sequence[1])