day6 part 1 and 2

This commit is contained in:
Tyrel Souza 2023-12-06 09:44:07 -05:00
parent 7311255b77
commit a4ca5f4a4a
No known key found for this signature in database
GPG Key ID: F3614B02ACBE438E
3 changed files with 72 additions and 0 deletions

2
2023/full/day06.txt Normal file
View File

@ -0,0 +1,2 @@
Time: 56 71 79 99
Distance: 334 1135 1350 2430

68
2023/python/day06.py Normal file
View File

@ -0,0 +1,68 @@
import matrix
import shared
from dataclasses import dataclass
from functools import reduce # Valid in Python 2.6+, required in Python 3
import operator
@dataclass
class Game:
duration: int
highscore: int
# @shared.profile
def part1(rows):
times = [int(r) for r in rows[0].split(":")[1].split(" ") if r]
distances = [int(r) for r in rows[1].split(":")[1].split(" ") if r]
ways = []
for game in [Game(*g) for g in zip(times, distances)]:
ways.append(calculate(game))
print(reduce(operator.mul, ways, 1))
# @shared.profile
def part2(rows):
times = [int("".join([r for r in rows[0].split(":")[1].split(" ") if r]))]
distances = [int("".join([r for r in rows[1].split(":")[1].split(" ") if r]))]
ways = []
for game in [Game(*g) for g in zip(times, distances)]:
ways.append(calculate(game))
print(reduce(operator.mul, ways, 1))
def calculate(game):
starting_win = None
for held in range(game.duration+1):
starting_win = held
remaining = game.duration - held
score = held * remaining
if score > game.highscore:
break
ending_win = None
for held in reversed(range(game.duration+1)):
ending_win = held
remaining = game.duration - held
score = held * remaining
if score > game.highscore:
break
print(game, starting_win, ending_win)
return ending_win+1-starting_win
def main():
rows = [row for row in shared.load_rows(6)]
with shared.elapsed_timer() as elapsed:
part1(rows)
print("🕒", elapsed())
rows = [row for row in shared.load_rows(6,True)]
with shared.elapsed_timer() as elapsed:
part2(rows)
print("🕒", elapsed())
if __name__ == "__main__":
main()

2
2023/samples/day06.txt Normal file
View File

@ -0,0 +1,2 @@
Time: 7 15 30
Distance: 9 40 200