advent-of-code/2015-python/solutions/day_14.py

50 lines
1.5 KiB
Python
Raw Normal View History

2023-10-26 18:25:07 +02:00
from collections import defaultdict
from re import compile, findall
from solutions import BaseSolution
class Solution(BaseSolution):
input_file = "14.txt"
def __str__(self):
return "Day 14: Reindeer Olympics"
def parse_input(self, data):
digits = compile(r"\d+")
return [
tuple(map(int, findall(digits, line))) for line in data.strip().splitlines()
]
def solve(self, puzzle_input, checkin=2503):
reindeers = []
for speed, duration, rest in puzzle_input:
window = duration + rest
sprints = checkin // window
if checkin % window >= duration:
sprints += 1
reindeers.append(speed * duration * sprints)
return max(reindeers)
def solve_again(self, puzzle_input, checkin=2503):
distances = defaultdict(int)
subwinners = defaultdict(int)
for ts in range(checkin):
r = 0
longest_distance = 0
for speed, duration, rest in puzzle_input:
if ts % (duration + rest) < duration:
distances[r] += speed
if distances[r] >= longest_distance:
longest_distance = distances[r]
r += 1
for r in [k for k, v in distances.items() if v == longest_distance]:
subwinners[r] += 1
return max(subwinners.values())
if __name__ == "__main__":
solution = Solution()
solution.show_results()