1
0
Fork 0
advent-of-code/2023/day04.py

36 lines
1.2 KiB
Python
Raw Permalink Normal View History

2024-02-08 09:55:40 +01:00
#!/usr/bin/env python3
lines = []
with open('./inputs/day04.txt') as f:
lines = f.readlines()
class scratch_card:
def __init__(self, card_input):
card = card_input.split(':')[1]
self.card_number = int(card_input.split(':')[0].split()[1])
numbers = card.split('|')
self.winning_numbers = list(map(lambda x: int(x.strip()), numbers[0].split()))
self.card_numbers = list(map(lambda x: int(x.strip()), numbers[1].split()))
self.winning_count = len(list(filter(lambda x: x in self.winning_numbers, self.card_numbers)))
self.card_score = 2 ** (self.winning_count - 1) if self.winning_count > 0 else 0
def __str__(self):
return f'({self.card_number}: {self.card_score}, {self.winning_count}, {self.winning_numbers}, {self.card_numbers})'
# part 1
cards = []
cards_by_number = {}
for line in lines:
cards.append(scratch_card(line))
cards_by_number[cards[-1].card_number] = cards[-1]
print(sum([card.card_score for card in cards]))
# part 2
for card in cards:
if card.winning_count > 0:
for i in range(1, card.winning_count + 1):
cards.append(cards_by_number[card.card_number + i])
print(len(cards))