generated from public/aoc_template
54 lines
1.2 KiB
Python
54 lines
1.2 KiB
Python
from tools.aoc import AOCDay
|
|
from typing import Any
|
|
|
|
|
|
def get_winning_times(max_ms: int, dist: int) -> int:
|
|
lower, higher = 0, 0
|
|
for ms in range(max_ms):
|
|
if ms * (max_ms - ms) > dist:
|
|
lower = ms
|
|
break
|
|
|
|
for ms in range(max_ms, 0, -1):
|
|
if ms * (max_ms - ms) > dist:
|
|
higher = ms
|
|
break
|
|
|
|
return higher - lower + 1
|
|
|
|
|
|
class Day(AOCDay):
|
|
inputs = [
|
|
[
|
|
(288, "input6_test"),
|
|
(219849, "input6_dennis"),
|
|
(219849, "input6"),
|
|
],
|
|
[
|
|
(71503, "input6_test"),
|
|
(29432455, "input6_dennis"),
|
|
(29432455, "input6"),
|
|
],
|
|
]
|
|
|
|
def part1(self) -> Any:
|
|
race_times, race_dists = self.getIntsFromInput()
|
|
ans = 1
|
|
|
|
for i, duration in enumerate(race_times):
|
|
ans *= get_winning_times(duration, race_dists[i])
|
|
|
|
return ans
|
|
|
|
def part2(self) -> Any:
|
|
race_times, race_dists = self.getIntsFromInput()
|
|
time = int("".join(map(str, race_times)))
|
|
dist = int("".join(map(str, race_dists)))
|
|
|
|
return get_winning_times(time, dist)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
day = Day(2023, 6)
|
|
day.run(verbose=True)
|