aoc2023/aoc/day06.py

56 lines
1.4 KiB
Python

from dataclasses import dataclass
from functools import reduce
import re
from .aoc import Aoc2, AocSameImplementation
@dataclass
class Race:
time: int
distance: int
class Day06(AocSameImplementation[list[Race]], Aoc2[list[Race], list[Race]]):
def simulate(self, timeaccel: int, timeoverall: int) -> int:
racetime = timeoverall - timeaccel
return racetime * timeaccel
def parseinput2(self, inpt: str) -> list[Race]:
lines = inpt.splitlines()
times = int("".join(re.findall(r"\d+", lines[0])))
distances = int("".join(re.findall(r"\d+", lines[1])))
return [Race(times, distances)]
def parseinput1(self, inpt: str) -> list[Race]:
lines = inpt.splitlines()
times = (int(d) for d in re.findall(r"\d+", lines[0]))
distances = (int(d) for d in re.findall(r"\d+", lines[1]))
return [Race(*t) for t in zip(times, distances)]
def part(self, inpt: list[Race]) -> int:
return reduce(
lambda x, y: x * y,
[
len(
[
poss
for poss in range(race.time)
if self.simulate(poss, race.time) > race.distance
]
)
for race in inpt
],
)
def main() -> None:
day06 = Day06(2023, 6)
day06.run()
if __name__ == "__main__":
main()