-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path4.py
97 lines (75 loc) · 2.23 KB
/
4.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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
def check_board(board_mask):
# check rows
for i in range(5):
if sum(board_mask[i]) == 5:
return True
board_mask = list(map(list, zip(*board_mask)))
for i in range(5):
if sum(board_mask[i]) == 5:
return True
def solution1(mask, dct) -> int:
inv_dct = dict(zip(dct.values(), dct.keys()))
sol = 0
for i in range(5):
for j in range(5):
if not mask[i][j]:
sol += inv_dct[(i, j)]
return sol
def solve1(numbers, masks, dicts) -> int:
for n in numbers:
for i in range(len(dicts)):
if n in dicts[i]:
masks[i][dicts[i][n][0]][dicts[i][n][1]] = True
if check_board(masks[i]):
print(i)
return n * solution1(masks[i], dicts[i])
def solve2(numbers, masks, dicts) -> int:
boards_that_won = [False] * 100
won_cnt = 0
last_won = -1
last_won_n = -1
for n in numbers:
for i in range(len(dicts)):
if boards_that_won[i]:
continue
if n in dicts[i]:
masks[i][dicts[i][n][0]][dicts[i][n][1]] = True
if check_board(masks[i]):
last_won = i
last_won_n = n
boards_that_won[i] = True
if won_cnt == 99:
return n * solution1(masks[i], dicts[i])
won_cnt += 1
return last_won_n * solution1(masks[last_won], dicts[last_won])
with open("4.txt", "r") as file:
s = file.read()
s = s.split("\n")
i = 0
numbers = [int(n) for n in s[0].split(',')]
i = 2
boards = []
masks = []
dicts = []
locations = []
for j in range(5):
row = []
for k in range(5):
row.append((j, k))
locations.append(row)
while i < len(s):
# Read 5 rows = 1 board
board = []
mask = []
dct = {}
for row in range(5):
board.append([int(n) for n in s[i].split(' ') if n != ''])
mask.append([False] * 5)
dct.update(dict(zip(board[row], locations[row])))
i += 1
boards.append(board)
masks.append(mask)
dicts.append(dct)
i += 1 # skip blank row
print(solve1(numbers, masks, dicts))
print(solve2(numbers, masks, dicts))