-
Notifications
You must be signed in to change notification settings - Fork 0
/
d4p2.py
46 lines (36 loc) · 1.31 KB
/
d4p2.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
41
42
43
44
45
from collections import Counter, defaultdict
BINGO_SIZE = 5
if __name__ == '__main__':
num_to_pos = defaultdict(list)
board_numbers = defaultdict(set)
incomplete_boards = 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)
incomplete_boards.add(board)
board += 1
pos_to_completion = Counter()
for val in draw:
for pos in num_to_pos[val]:
board = pos[2]
board_numbers[board].discard(val)
pos_to_completion[pos] += 1
if pos_to_completion[pos] == BINGO_SIZE:
incomplete_boards.discard(board)
if len(incomplete_boards) == 0:
sum_unmarked = sum(board_numbers[board])
print(sum_unmarked, val, sum_unmarked * val)
break
else:
continue
break