-
Notifications
You must be signed in to change notification settings - Fork 0
/
d4p1.py
41 lines (31 loc) · 1.1 KB
/
d4p1.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
39
40
from collections import Counter, defaultdict
BINGO_SIZE = 5
if __name__ == '__main__':
num_to_pos = defaultdict(list)
board_numbers = defaultdict(set)
with open('d4_input.txt', 'r') as f:
it_f = iter(f)
draw = map(int, next(it_f).strip().split(','))
board = 0
while True:
try:
next(it_f)
except StopIteration:
break
for row in range(BINGO_SIZE):
for col, val in enumerate(map(int, next(it_f).strip().split())):
num_to_pos[val].extend([(row, True, board), (col, False, board)])
board_numbers[board].add(val)
board += 1
pos_to_completion = Counter()
for val in draw:
for pos in num_to_pos[val]:
board_numbers[pos[2]].discard(val)
pos_to_completion[pos] += 1
if pos_to_completion[pos] == BINGO_SIZE:
sum_unmarked = sum(board_numbers[pos[2]])
print(sum_unmarked, val, sum_unmarked * val)
break
else:
continue
break