blob: e42372bdf8c7b239a42ae73dec01d888872d070a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#!/usr/bin/env python3
import aoc20
import sys
def pt1(_in):
me = int(_in[0])
busses = [int(s) for s in _in[1].split(",") if s != "x"]
time = me
while True:
for bus in busses:
if time % bus == 0:
return (time - me) * bus
time += 1
def mul_inv(a, m):
return pow(a, -1, mod=m)
def pt2(_in):
busses = {}
for i, s in enumerate(_in[1].strip().split(",")):
if s != "x":
busses[i] = int(s)
N = 1
for dep, bus in busses.items():
N *= bus
return sum(-dep * (N // bus) * mul_inv(N // bus, bus)
for dep, bus in busses.items()) % N
if __name__ == "__main__":
input = aoc20.read_input(sys.argv[1:], 13)
print(pt1(input))
print(pt2(input))
|