46 lines
993 B
Python
46 lines
993 B
Python
import sys
|
|
from lib import str_to_ints
|
|
from copy import deepcopy
|
|
|
|
with open("i15.txt") as f:
|
|
d = f.read()
|
|
|
|
part_2 = True
|
|
if part_2:
|
|
d += "#7 11 0 0"
|
|
|
|
discs = []
|
|
for line in d.splitlines():
|
|
id, npos, time, cpos = str_to_ints(line)
|
|
discs.append([cpos, npos])
|
|
|
|
qpos = -1
|
|
orig_discs = deepcopy(discs)
|
|
|
|
# empirically could dev algo to find or CRT?
|
|
if part_2:
|
|
start, delta = 12136, 33915
|
|
else:
|
|
start, delta = 831, 2261
|
|
|
|
for start_time in range(start, 1_000_000_000, delta):
|
|
discs = deepcopy(orig_discs)
|
|
|
|
# let discs move for initial wait
|
|
for _ in range(start_time):
|
|
for disc in discs:
|
|
disc[0] = (disc[0] + 1) % disc[1]
|
|
|
|
# drop the capsule
|
|
for i in range(len(discs)):
|
|
# discs move first
|
|
for disc in discs:
|
|
disc[0] = (disc[0] + 1) % disc[1]
|
|
|
|
# check if there is a collission for the current disc
|
|
if discs[i][0] != 0:
|
|
break
|
|
else:
|
|
print(start_time)
|
|
sys.exit(0)
|