-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday4_task2.py
More file actions
88 lines (67 loc) · 1.96 KB
/
Copy pathday4_task2.py
File metadata and controls
88 lines (67 loc) · 1.96 KB
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
###############################################################################
# Day 4, Task 1 #
###############################################################################
import aoc_util
day = 4
data_str = """7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
22 13 17 11 0
8 2 23 4 24
21 9 14 16 7
6 10 3 18 5
1 12 20 15 19
3 15 0 2 22
9 18 13 17 5
19 8 7 25 23
20 11 10 24 4
14 21 16 12 6
14 21 17 24 4
10 16 15 9 19
18 8 23 26 20
22 11 13 6 5
2 0 12 3 7"""
def check_board(board):
cols_finished = [True] * 5
for row in board:
row_finished = True
for i, n in enumerate(row):
if not n[1]:
row_finished = False
cols_finished[i] = False
if row_finished:
return True
for n in cols_finished:
if n:
return True
return False
def count_board(board):
count = 0
for row in board:
for c in row:
if c[1] == False:
count += c[0]
return count
def task(data_set: list[str]) -> int:
bingo_boards = []
for index, row in enumerate(data_set[1:]):
if index % 6 == 0:
bingo_boards.append([])
else:
last = bingo_boards[-1]
last.append([[int(x), False] for x in row.split()])
nums = [int(x) for x in data_set[0].split(",")]
for num in nums:
i = 0
while i < len(bingo_boards):
board = bingo_boards[i]
for row in board:
for e in row:
if e[0] == num:
e[1] = True
if (check_board(board)):
bingo_boards.remove(board)
i -= 1
if len(bingo_boards) == 0:
return count_board(board) * num
i += 1
aoc_util.run_with_data_str(task, data_str)
aoc_util.run_with_data_set(task, day)