25 lines
620 B
Python
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])
|