#!/usr/bin/env python from aoc import get_input # AoC data = get_input(13).splitlines() time = int(data[0]) busses = [] for busid in data[1].split(","): if(busid != "x"): busses.append(int(busid)) busses.sort() def getTimestamp(busid, i): return busid * i bustimes = dict() for busid in busses: i = 0 bustimes[busid] = [] while True: timestamp = getTimestamp(busid, i) bustimes[busid].append(timestamp) if(timestamp > time): break else: i += 1 continue waittimes = dict() for busid, t in bustimes.items(): high = max(t) waittimes[busid] = high - time bestbusid = min(waittimes, key=waittimes.get) thing = bestbusid * waittimes[bestbusid] # Part 2 bus = dict() i = 0 for busid in data[1].split(","): if(busid != "x"): bus[i] = int(busid) i += 1 from sympy.ntheory.modular import crt pos = [] buss = [] for i, busid in bus.items(): pos.append(i) buss.append(busid) hello = crt(buss, pos) thething = hello[1] - hello[0] print("Part1", thing) print("Part2", thething)