add day6
This commit is contained in:
68
day6/day6.py
Normal file
68
day6/day6.py
Normal file
@@ -0,0 +1,68 @@
|
||||
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)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user