aoc2023/day4/main.py
2023-12-08 22:36:33 -05:00

83 lines
2.0 KiB
Python

from pprint import pp
from dataclasses import dataclass
from typing import List
FNAME = 'input'
data = []
with open(FNAME) as f:
data = f.read().splitlines()
total = 0
for d in data:
dsplit = d.split(":")
game = dsplit[0]
gamedata = dsplit[1]
gameNumsRaw = gamedata.split("|")
winningNumbers = gameNumsRaw[0]
myNumbers = gameNumsRaw[1]
winningNumbers = [int(x) for x in list(filter(len, winningNumbers.split(" ")))]
myNumbers = [int(x) for x in list(filter(len, myNumbers.split(" ")))]
overlapCount = len(set(winningNumbers).intersection(set(myNumbers)))
score = 0
if overlapCount > 0:
score = 2**(overlapCount - 1)
total = total + score
pp(total)
@dataclass
class GameInfo:
winningNumbers: List[int]
myNumbers: List[int]
points: int
myHand = {}
state = []
for d in data:
dsplit = d.split(":")
game = dsplit[0]
gamedata = dsplit[1]
gameNumsRaw = gamedata.split("|")
winningNumbers = gameNumsRaw[0]
myNumbers = gameNumsRaw[1]
winningNumbers = [int(x) for x in list(filter(len, winningNumbers.split(" ")))]
myNumbers = [int(x) for x in list(filter(len, myNumbers.split(" ")))]
overlapCount = len(set(winningNumbers).intersection(set(myNumbers)))
state.append(GameInfo(winningNumbers, myNumbers, overlapCount))
pp(state)
for i in range(len(state)):
# Add the card of that value to my hand
nextC = state[i].points
pp(("card", i + 1, "idx", i, "score", nextC))
if not myHand.get(i + 1):
myHand[i + 1] = 1
else:
myHand[i + 1] = myHand[i + 1] + 1
pp(myHand)
# Process this card value and add to hand
for _ in range(myHand[i + 1]):
for j in range(i + 1, i + nextC + 1):
if not myHand.get(j + 1):
myHand[j + 1] = 1
else:
myHand[j + 1] = myHand[j + 1] + 1
pp(myHand)
pp("<<<<<<<<<<<<")
pp("===========================")
pp(myHand)
sum = 0
for _, v in myHand.items():
sum = sum + v
pp(sum)