-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday4.py
38 lines (30 loc) · 983 Bytes
/
day4.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from collections import defaultdict
with open('input4.txt', 'r') as f:
cards = f.readlines()
# part 1
def points_card(card):
id, all_numbers = card.split(':')
winning, numbers = map(str.split, all_numbers.split('|'))
winning = set(winning)
points = 0
for number in numbers:
if number in winning:
if points == 0: points = 1
else: points = points*2
return points
print(sum(map(points_card, cards)))
# part 2
id_cards = defaultdict(lambda: 1)
def matching_cards(card):
card_id, all_numbers = card.split(':')
card_id = int(card_id.split()[1])
winning, numbers = map(str.split, all_numbers.split('|'))
winning = set(winning)
number_of_card = id_cards[card_id]
id_to_increase = card_id + 1
for number in numbers:
if number in winning:
id_cards[id_to_increase] += number_of_card
id_to_increase += 1
list(map(matching_cards, cards))
print(sum(id_cards.values()))