From 13b350b10a0ebc6ebefe62bf800806a049930ff1 Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Wed, 6 Dec 2023 06:21:49 +0100 Subject: [PATCH] Day 6 - cleanup --- day06.py | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/day06.py b/day06.py index fe399a4..da835dd 100644 --- a/day06.py +++ b/day06.py @@ -2,6 +2,21 @@ 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 = [ [ @@ -19,13 +34,8 @@ class Day(AOCDay): ans = 1 for i, duration in enumerate(race_times): - count = 0 - for ms in range(duration): - t = race_dists[i] - if ms * (duration - ms) > t: - count += 1 + ans *= get_winning_times(duration, race_dists[i]) - ans *= count return ans def part2(self) -> Any: @@ -33,18 +43,7 @@ class Day(AOCDay): time = int("".join(map(str, race_times))) dist = int("".join(map(str, race_dists))) - lower, higher = 0, 0 - for ms in range(time): - if ms * (time - ms) > dist: - lower = ms - break - - for ms in range(time, 0, -1): - if ms * (time - ms) > dist: - higher = ms - break - - return higher - lower + 1 + return get_winning_times(time, dist) if __name__ == "__main__":