Pārlūkot izejas kodu

Solve 2020 day 13

Taddeus Kroes 5 gadi atpakaļ
vecāks
revīzija
330050ed10
2 mainītis faili ar 34 papildinājumiem un 0 dzēšanām
  1. 32 0
      2020/13_shuttle.py
  2. 2 0
      2020/input/13

+ 32 - 0
2020/13_shuttle.py

@@ -0,0 +1,32 @@
+#!/usr/bin/env python3
+import sys
+from functools import reduce
+from math import gcd
+
+def parse(f):
+    yield int(next(f))
+    yield list(map(int, next(f).replace('x', '0').split(',')))
+
+def earliest_bus(arrival, buses):
+    wait, bus = min(((bus - arrival % bus) % bus, bus) for bus in buses if bus)
+    return wait * bus
+
+def lcm(a, b):
+    return abs(a * b) // gcd(a, b)
+
+def sync(buses):
+    period, maxi = max((bus, i) for i, bus in enumerate(buses))
+    diffs = [(i - maxi, bus) for i, bus in enumerate(buses) if bus]
+    mindiff = diffs[0][0]
+    t = 0
+    while diffs:
+        t += period
+        synced = [bus for diff, bus in diffs if (t + diff) % bus == 0]
+        if synced:
+            period = reduce(lcm, [period] + synced)
+            diffs = [(diff, bus) for diff, bus in diffs if bus not in synced]
+    return t + mindiff
+
+arrival, buses = parse(sys.stdin)
+print(earliest_bus(arrival, buses))
+print(sync(buses))

+ 2 - 0
2020/input/13

@@ -0,0 +1,2 @@
+1000510
+19,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,523,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,17,13,x,x,x,x,x,x,x,x,x,x,29,x,853,x,x,x,x,x,37,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,23