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

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)))}')