with open('input.txt') as fh: s = fh.read() lines = s.split('\n') t0 = int(lines[0]) values = lines[1].split(',') def part1(): best_dt = None best_x = None for x in values: if x == 'x': continue x = int(x) dt = x - t0 % x if best_dt is None or dt < best_dt: best_x = x best_dt = dt print(best_dt * best_x) def gcd(a, b): if b == 0: return a else: return gcd(b, a % b) def lcm(a, b): return a * b / gcd(a, b) def combine(a, b): ia, xa = a ib, xb = b x = lcm(xa, xb) i = ia while True: if (i - ib) % xb == 0: return i, x i += xa def part2(): v = [(i, int(x)) for i, x in enumerate(values) if x != 'x'] i, x = v.pop() while v: i, x = combine((i, x), v.pop()) return (-i) % x part1() print(part2())