I completely overcomplicated this for myself for a bit.
Part 1
def parse_input():
rawinput = open("input.txt", "r")
input = rawinput.read().splitlines()
rawinput.close()
scratchcards = []
for i in input:
i = i.removeprefix("Card ").split("|")
card_id, winning_numbers = i[0].split(":")
card_id = int(card_id)
winning_numbers = winning_numbers.split()
numbers_i_have = i[1].split()
scratchcard = dict(
card_id=card_id,
winning_numbers=winning_numbers,
numbers_i_have=numbers_i_have,
)
scratchcards.append(scratchcard)
return scratchcards
scratchcards = parse_input()
total_score = 0
for s in scratchcards:
matches = 0
for n in s["numbers_i_have"]:
for w in s["winning_numbers"]:
if n == w:
if matches == 0:
matches += 1
else:
matches *= 2
total_score += matches
print(total_score)syntax highlighting by codehost
Part 2
def parse_input():
rawinput = open("input.txt", "r")
input = rawinput.read().splitlines()
rawinput.close()
scratchcards = []
for i in input:
i = i.removeprefix("Card ").split("|")
card_id, winning_numbers = i[0].split(":")
card_id = int(card_id)
winning_numbers = winning_numbers.split()
numbers_i_have = i[1].split()
scratchcard = dict(
card_id=card_id,
num_copies=1,
winning_numbers=winning_numbers,
numbers_i_have=numbers_i_have,
)
scratchcards.append(scratchcard)
return scratchcards
scratchcards = parse_input()
total = 0
for s in scratchcards:
matches = 0
total += s["num_copies"]
for n in s["numbers_i_have"]:
for w in s["winning_numbers"]:
if n == w:
copied_card = scratchcards[s["card_id"] + matches]
copied_card["num_copies"] += s["num_copies"]
matches += 1
print(total)syntax highlighting by codehost
Maybe one day I'll branch out from just constantly using nested for loops and do something more interesting. I guess I did use some recursion yesterday though.