2023/day02: Complete!
parent
0c17e66cfd
commit
c31f4fd964
|
@ -0,0 +1,83 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from typing import TextIO
|
||||
|
||||
p = {"red": 12, "green": 13, "blue": 14}
|
||||
|
||||
p2 = []
|
||||
|
||||
|
||||
def part1(f: TextIO) -> int:
|
||||
games: int = 0
|
||||
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
|
||||
id_ = int(line.split(":")[0].split()[1])
|
||||
|
||||
line = line.split("; ")
|
||||
line[0] = line[0].split(": ")[1] # remove the Game #:
|
||||
clues = []
|
||||
|
||||
f_p2 = [] # for part 2
|
||||
|
||||
for c in range(len(line)):
|
||||
clues.append(line[c].split(", "))
|
||||
f_p2.append(clues[-1])
|
||||
|
||||
p2.append(f_p2)
|
||||
|
||||
flag = True
|
||||
|
||||
for peek in clues:
|
||||
# for each, if type is over
|
||||
# set to false, exit early and do not add the game id
|
||||
for t in peek:
|
||||
t = t.split()
|
||||
t[0] = int(t[0])
|
||||
|
||||
if t[0] > p[t[1]]:
|
||||
flag = False
|
||||
break
|
||||
|
||||
if flag is False:
|
||||
break
|
||||
|
||||
if flag is True:
|
||||
games += id_
|
||||
|
||||
return games
|
||||
|
||||
|
||||
def mult(p: list) -> int:
|
||||
pr = 1
|
||||
for item in p:
|
||||
pr *= item
|
||||
return pr
|
||||
|
||||
|
||||
def part2(games: list) -> int:
|
||||
sum_ = 0
|
||||
|
||||
for game in games:
|
||||
mins: dict[str, int] = {}
|
||||
|
||||
for clues in game:
|
||||
for clue in clues:
|
||||
clue = clue.split()
|
||||
clue[0] = int(clue[0])
|
||||
|
||||
if clue[1] in mins:
|
||||
mins[clue[1]] = max(mins[clue[1]], clue[0])
|
||||
else:
|
||||
mins[clue[1]] = clue[0]
|
||||
|
||||
sum_ += mult(list(mins.values()))
|
||||
|
||||
return sum_
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open("day02.txt") as f:
|
||||
print(part1(f))
|
||||
print(part2(p2))
|
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from day02 import *
|
||||
|
||||
|
||||
def test_part1() -> None:
|
||||
with open("day02.txt") as f:
|
||||
assert part1(f) == 2810
|
||||
|
||||
|
||||
def test_part2() -> None:
|
||||
assert part2(p2) == 69110
|
Loading…
Reference in New Issue