31 lines
562 B
Python
31 lines
562 B
Python
import math
|
|
|
|
def lcm(a, b):
|
|
return abs(a*b) // math.gcd(a, b)
|
|
|
|
|
|
# an+b=xn+y -> n=(y-b)/(a-x)
|
|
# -> cn+d
|
|
def merge(a, b, x, y):
|
|
d1 = b
|
|
d2 = y
|
|
while d1 != d2:
|
|
if d1 < d2:
|
|
d1 += a * ((d2-d1-1) // a + 1)
|
|
else:
|
|
d2 += x * ((d1-d2-1) // x + 1)
|
|
d = d1
|
|
c = lcm(a, x)
|
|
return c, d
|
|
|
|
|
|
lines = [x.strip() for x in open("input.txt")]
|
|
busses = ((int(x), -idx) for idx, x in enumerate(lines[1].split(',')) if x != 'x')
|
|
|
|
current = (1, 0)
|
|
for bus in busses:
|
|
current = merge(*current, *bus)
|
|
|
|
|
|
print(current[1])
|