Files
advent-of-code-2023/day6/day6.py
Dmitry Fedotov 79b7391d1e add day6
2023-12-17 13:07:02 +03:00

69 lines
1.8 KiB
Python

import sys
sys.path.append('../lib')
import tools
class Race(object):
def __init__(self, duration, distance):
self.duration = duration
self.distance = distance
def __str__(self):
return f'Time: {self.duration}, Distance: {self.distance}'
def calc_winning_strategies(self) -> list:
winning_press_durations = []
for dur in range(1, self.duration):
if ((self.duration - dur) * dur) > self.distance:
winning_press_durations.append(dur)
return winning_press_durations
class RaceSet(object):
def __init__(self, inp, join_input=False):
if join_input:
times = [int(''.join([n for n in inp[0].split(':')[1].split()]))]
distances = [int(''.join([n for n in inp[1].split(':')[1].split()]))]
else:
times = [int(n) for n in inp[0].split(':')[1].split()]
distances = [int(n) for n in inp[1].split(':')[1].split()]
assert len(times) == len(distances)
self.races = []
for i in range(len(times)):
r = Race(times[i], distances[i])
self.races.append(r)
def __str__(self):
out = f'Set of {len(self.races)} races:\n'
out += "\n".join([str(r) for r in self.races])
return out
def calc_product_of_winning_strategies(self) -> int:
product = 1
for r in self.races:
strategies = r.calc_winning_strategies()
product *= len(strategies)
return product
if __name__ == '__main__':
r = tools.Reader('input.txt')
lines = r.read()
races = RaceSet(lines)
print(races)
x = races.calc_product_of_winning_strategies()
print(x)
races = RaceSet(lines, join_input=True)
print(races)
x = races.calc_product_of_winning_strategies()
print(x)