40 lines
1 KiB
Python
40 lines
1 KiB
Python
def get_data() -> (int, list[int]):
|
|
with open("input.txt") as file:
|
|
time = int(file.readline().rstrip())
|
|
buses = file.readline().rstrip().split(',')
|
|
return time, buses
|
|
|
|
|
|
def solve_p1(time: int, buses: list[str]) -> int:
|
|
|
|
def find_earliest_departure(_bus_id: int, _time: int) -> int:
|
|
_departure = 0
|
|
while _departure < _time:
|
|
_departure += _bus_id
|
|
return _departure
|
|
|
|
times = []
|
|
for bus in buses:
|
|
if bus == 'x':
|
|
continue
|
|
times.append((int(bus), find_earliest_departure(_bus_id=int(bus), _time=time)))
|
|
sort = sorted(times, key=lambda x: x[1])
|
|
return sort[0][0] * (sort[0][1] - time)
|
|
|
|
|
|
def solve_p2(buses):
|
|
curr_step = 1
|
|
result = 1
|
|
for i in range(len(buses)):
|
|
if buses[i] == 'x':
|
|
continue
|
|
while (result + i) % int(buses[i]) != 0:
|
|
result += curr_step
|
|
curr_step *= int(buses[i])
|
|
return result
|
|
|
|
|
|
TIME, BUSES = get_data()
|
|
print(solve_p1(TIME, BUSES))
|
|
print(solve_p2(BUSES))
|