summaryrefslogtreecommitdiffstats
path: root/20/py/d13.py
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-12-13 08:28:08 +0100
committerGustav Sörnäs <gustav@sornas.net>2020-12-13 08:41:23 +0100
commita7f3b70e7312baf195ddfddd26e97cae53f88f38 (patch)
tree42826b427d95af11f67a9d7879601e09a682cf35 /20/py/d13.py
parent7066e473e844c5fbfc6e8b23582e1b553c14e530 (diff)
downloadaoc-a7f3b70e7312baf195ddfddd26e97cae53f88f38.tar.gz
day 13
Diffstat (limited to '20/py/d13.py')
-rw-r--r--20/py/d13.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/20/py/d13.py b/20/py/d13.py
new file mode 100644
index 0000000..fde95e9
--- /dev/null
+++ b/20/py/d13.py
@@ -0,0 +1,38 @@
+#!/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
+ x = 0
+ for dep, bus in busses.items():
+ x += -dep * (N // bus) * mul_inv(N // bus, bus)
+ return x % N
+
+
+if __name__ == "__main__":
+ input = aoc20.read_input(sys.argv[1:], 13)
+ print(pt1(input))
+ print(pt2(input))