day13: TIL: Chinese Remainder Theorem
This commit is contained in:
parent
b3c49e5353
commit
3cb30170e2
37
day13.py
Normal file
37
day13.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import aoclib
|
||||||
|
import math
|
||||||
|
import sys
|
||||||
|
|
||||||
|
DAY = 13
|
||||||
|
TEST_SOLUTION_PART1 = 295
|
||||||
|
TEST_SOLUTION_PART2 = 1068781
|
||||||
|
|
||||||
|
|
||||||
|
def part1(test_mode=False):
|
||||||
|
my_input = aoclib.getInputAsArraySplit(day=DAY, split_char=",", test=test_mode)
|
||||||
|
|
||||||
|
my_arrival = int(my_input[0][0])
|
||||||
|
bus_ids = [int(i) for i in my_input[1] if i != 'x']
|
||||||
|
waiting_times = [i - my_arrival % i for i in bus_ids]
|
||||||
|
min_waiting_time = min(waiting_times)
|
||||||
|
|
||||||
|
return min_waiting_time * bus_ids[waiting_times.index(min_waiting_time)]
|
||||||
|
|
||||||
|
|
||||||
|
def part2(test_mode=False):
|
||||||
|
my_input = aoclib.getInputAsArraySplit(day=DAY, split_char=",", test=test_mode)
|
||||||
|
|
||||||
|
bus_ids = {-i: int(v) for i, v in enumerate(my_input[1]) if v != 'x'}
|
||||||
|
lowest_common_multiple = math.lcm(*bus_ids.values())
|
||||||
|
base_multipliers = [lowest_common_multiple // interval for interval in bus_ids.values()]
|
||||||
|
modular_multiplicative_inverses = [
|
||||||
|
pow(base_multiplier, -1, interval)
|
||||||
|
for base_multiplier, interval
|
||||||
|
in zip(base_multipliers, bus_ids.values())
|
||||||
|
]
|
||||||
|
|
||||||
|
return sum(
|
||||||
|
offset * multiplier * mmi
|
||||||
|
for offset, multiplier, mmi
|
||||||
|
in zip(bus_ids.keys(), base_multipliers, modular_multiplicative_inverses)
|
||||||
|
) % lowest_common_multiple
|
||||||
2
inputs/13
Normal file
2
inputs/13
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
1008832
|
||||||
|
23,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,449,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,13,19,x,x,x,x,x,x,x,x,x,29,x,991,x,x,x,x,x,37,x,x,x,x,x,x,x,x,x,x,17
|
||||||
3
inputs/13_test
Normal file
3
inputs/13_test
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
939
|
||||||
|
7,13,x,x,59,x,31,19
|
||||||
|
17,x,13,19
|
||||||
Loading…
Reference in New Issue
Block a user