You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
lines = open('inputs/day4.txt').readlines()
|
|
|
|
def ticket_numbers(line: str) -> tuple:
|
|
line = line.split("|")
|
|
winning = [int(x) for x in line[0].replace(" ", " ").split(":")[1].strip().split(" ")]
|
|
ticket = [int(x) for x in line[1].replace(" ", " ").strip().split(" ")]
|
|
return winning, ticket
|
|
|
|
def wins2score(wins: list[int]) -> int:
|
|
total = 0
|
|
for win in wins:
|
|
if win > 0:
|
|
total += 2 ** (win-1)
|
|
return total
|
|
|
|
def count_wins(lines: list[str]) -> int:
|
|
scores = []
|
|
for line in lines:
|
|
winning, ticket = ticket_numbers(line)
|
|
wins = 0
|
|
for nr in winning:
|
|
if nr in ticket:
|
|
wins += 1
|
|
scores.append(wins)
|
|
return scores
|
|
|
|
def count_total_cards(wins: list[int]) -> int:
|
|
copies = [1 for x in wins]
|
|
for i in range(len(wins)):
|
|
win = wins[i]
|
|
for w in range(win):
|
|
copies[i+w+1] += copies[i]
|
|
return copies
|
|
|
|
print(f'Solution Part 1: {wins2score(count_wins(lines))}')
|
|
print(f'Solution Part 2: {sum(count_total_cards(count_wins(lines)))}') |