From 25b35e8f5c9f23278b495a8234afb26bf31b7afa Mon Sep 17 00:00:00 2001 From: a Date: Sun, 13 Dec 2020 01:13:19 -0600 Subject: [PATCH] ughhhh --- 2020/13/13.py | 55 ++++++++++++++++++++++++++++++++++++++++ 2020/13/input.txt | 2 ++ 2020/13/input_sample.txt | 2 ++ 3 files changed, 59 insertions(+) create mode 100644 2020/13/13.py create mode 100644 2020/13/input.txt create mode 100644 2020/13/input_sample.txt diff --git a/2020/13/13.py b/2020/13/13.py new file mode 100644 index 0000000..fa1d2a6 --- /dev/null +++ b/2020/13/13.py @@ -0,0 +1,55 @@ +def read_file(): + with open("input.txt","r") as f: + timestamp, buses = f.read().split('\n') + timestamp = int(timestamp) + buses = buses.split(',') + working_buses = [int(b) for b in buses if b != "x"] + return timestamp, working_buses, buses + +def part1(timestamp, buses): + waits = [abs((timestamp % b) - b) for b in buses] + i = waits.index(min(waits)) + return buses[i] * (waits[i]) + +from functools import reduce +def crt(a,n): + sum=0 + product =reduce(lambda a, b: a*b, n) + for n_i, a_i in zip(n,a): + p = product // n_i + sum += a_i * mul_inv(p, n_i) * p + return sum % product +def mul_inv(a, b): + b0 = b + x0, x1 = 0, 1 + if b == 1: + return 1 + while a > 1: + q = a // b + a, b = b, (a % b) + x0, x1 = (x1 - q * x0), x0 + if x1 < 0: + x1 += b0 + return x1 + +def part2(buses): + r = [] + m = [] + for i, b in enumerate(buses): # i = wait, b = modulo + if b == "x": + continue + b = int(b) + r.append(b-i) # convert to remainder + m.append(b) + return crt(r,m) + +def main(): + timestamp, working_buses, all_buses = read_file() + print(part1(timestamp, working_buses), part2(all_buses)) + print(part2([17,"x",13,19])) # 3417 + print(part2([67,7,59,61])) # 754018 + print(part2([67,"x",7,59,61])) # 779210 + print(part2([67,7,"x",59,61])) # 1261476 + print(part2([1789,37,47,1889])) # 1202161486 +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/2020/13/input.txt b/2020/13/input.txt new file mode 100644 index 0000000..1f1ba00 --- /dev/null +++ b/2020/13/input.txt @@ -0,0 +1,2 @@ +1000417 +23,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,37,x,x,x,x,x,479,x,x,x,x,x,x,x,x,x,x,x,x,13,x,x,x,17,x,x,x,x,x,x,x,x,x,x,x,29,x,373,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,19 \ No newline at end of file diff --git a/2020/13/input_sample.txt b/2020/13/input_sample.txt new file mode 100644 index 0000000..e473080 --- /dev/null +++ b/2020/13/input_sample.txt @@ -0,0 +1,2 @@ +939 +7,13,x,x,59,x,31,19 \ No newline at end of file