Cleanup
This commit is contained in:
67
04/4.py
Normal file
67
04/4.py
Normal file
@@ -0,0 +1,67 @@
|
||||
import numpy as np
|
||||
|
||||
|
||||
def bingo_in_lines(lines: np.ndarray) -> bool:
|
||||
for line in lines:
|
||||
if np.all(line == -1):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def bingo_in_board(board: np.ndarray) -> bool:
|
||||
return bingo_in_lines(board) or bingo_in_lines(board.T)
|
||||
|
||||
|
||||
def board_score(board: np.ndarray, number: int) -> int:
|
||||
return board[board != -1].sum() * number
|
||||
|
||||
|
||||
def part_one(boards: np.ndarray, numbers: list[int]):
|
||||
for number in numbers:
|
||||
boards[boards == number] = -1
|
||||
|
||||
for board in boards:
|
||||
if bingo_in_board(board):
|
||||
return board_score(board, number)
|
||||
|
||||
|
||||
def part_two(boards: np.ndarray, numbers: list[int]):
|
||||
for number in numbers:
|
||||
boards[boards == number] = -1
|
||||
|
||||
done_boards = []
|
||||
|
||||
for b, board in enumerate(boards):
|
||||
if bingo_in_board(board):
|
||||
done_boards.append(b)
|
||||
|
||||
if len(boards) == 1 and len(done_boards) == 1:
|
||||
board = boards[0]
|
||||
return board_score(board, number)
|
||||
|
||||
boards = np.delete(boards, done_boards, axis=0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
||||
numbers = [int(x) for x in input().split(",")]
|
||||
|
||||
input() # Skip blank line
|
||||
|
||||
boards = []
|
||||
|
||||
current_board = []
|
||||
|
||||
for line in sys.stdin:
|
||||
if line != "\n":
|
||||
current_board.append([int(x) for x in line.split()])
|
||||
else:
|
||||
boards.append(current_board)
|
||||
current_board = []
|
||||
|
||||
np_boards = np.array(boards)
|
||||
|
||||
print("Winning board:", part_one(np_boards.copy(), numbers))
|
||||
|
||||
print("Losing board :", part_two(np_boards.copy(), numbers))
|
||||
19
04/ex4.in
Normal file
19
04/ex4.in
Normal file
@@ -0,0 +1,19 @@
|
||||
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
|
||||
601
04/input4.in
Normal file
601
04/input4.in
Normal file
@@ -0,0 +1,601 @@
|
||||
92,12,94,64,14,4,99,71,47,59,37,73,29,7,16,32,40,53,30,76,74,39,70,88,55,45,17,0,24,65,35,20,63,68,89,84,33,66,18,50,38,10,83,75,67,42,3,56,82,34,90,46,87,52,49,2,21,62,93,86,25,78,19,57,77,26,81,15,23,31,54,48,98,11,91,85,60,72,8,69,6,22,97,96,80,95,58,36,44,1,51,43,9,61,41,79,5,27,28,13
|
||||
|
||||
60 79 46 9 58
|
||||
97 81 6 94 84
|
||||
38 40 17 61 29
|
||||
11 28 0 91 15
|
||||
24 77 34 59 36
|
||||
|
||||
52 75 98 41 92
|
||||
73 5 29 45 62
|
||||
17 57 0 37 93
|
||||
59 36 35 84 18
|
||||
7 66 72 55 9
|
||||
|
||||
51 83 36 4 46
|
||||
99 3 34 2 1
|
||||
37 5 35 32 24
|
||||
98 82 75 0 22
|
||||
12 91 45 39 69
|
||||
|
||||
98 52 56 74 8
|
||||
7 29 20 85 58
|
||||
51 95 32 77 72
|
||||
54 81 37 1 71
|
||||
2 5 66 83 42
|
||||
|
||||
3 60 86 77 21
|
||||
70 53 4 57 88
|
||||
95 50 41 34 67
|
||||
7 13 45 80 33
|
||||
42 0 22 63 71
|
||||
|
||||
56 35 68 58 84
|
||||
62 74 81 79 64
|
||||
10 12 73 51 76
|
||||
36 41 37 17 70
|
||||
18 50 87 69 95
|
||||
|
||||
68 98 72 45 33
|
||||
21 58 93 55 5
|
||||
59 51 88 81 0
|
||||
1 14 69 66 34
|
||||
64 42 11 39 83
|
||||
|
||||
80 8 12 47 54
|
||||
74 71 30 5 78
|
||||
86 11 58 35 7
|
||||
63 44 10 51 85
|
||||
69 91 56 40 89
|
||||
|
||||
76 70 95 67 23
|
||||
98 65 3 53 80
|
||||
14 22 71 4 60
|
||||
26 87 94 89 13
|
||||
82 7 32 86 12
|
||||
|
||||
59 52 58 93 88
|
||||
28 45 84 64 34
|
||||
13 23 19 60 80
|
||||
11 38 54 27 76
|
||||
68 74 1 36 55
|
||||
|
||||
46 89 75 79 19
|
||||
67 45 34 47 90
|
||||
72 60 68 42 8
|
||||
0 88 12 29 40
|
||||
9 99 66 43 94
|
||||
|
||||
74 39 77 10 11
|
||||
14 94 13 27 61
|
||||
21 31 87 16 52
|
||||
95 33 71 98 5
|
||||
0 38 12 96 54
|
||||
|
||||
77 15 50 52 79
|
||||
98 71 48 68 93
|
||||
41 97 39 58 99
|
||||
40 3 91 96 7
|
||||
82 89 33 65 1
|
||||
|
||||
51 38 12 83 74
|
||||
37 52 29 2 35
|
||||
99 54 3 20 44
|
||||
23 66 59 72 50
|
||||
88 6 79 24 67
|
||||
|
||||
69 90 33 28 22
|
||||
98 62 52 50 12
|
||||
8 77 61 54 59
|
||||
11 18 49 42 17
|
||||
20 85 48 82 27
|
||||
|
||||
31 77 92 20 14
|
||||
52 83 50 6 97
|
||||
70 76 53 67 79
|
||||
1 98 96 65 34
|
||||
19 66 13 56 89
|
||||
|
||||
59 22 70 86 99
|
||||
39 14 89 75 42
|
||||
12 87 55 67 28
|
||||
71 26 11 31 65
|
||||
73 74 58 46 94
|
||||
|
||||
8 62 56 29 42
|
||||
83 35 53 78 26
|
||||
73 60 49 98 18
|
||||
84 19 16 10 25
|
||||
80 48 0 74 63
|
||||
|
||||
32 5 55 44 71
|
||||
2 29 67 93 64
|
||||
18 58 7 4 13
|
||||
28 51 91 79 53
|
||||
77 80 20 19 30
|
||||
|
||||
63 95 73 55 68
|
||||
88 37 62 85 61
|
||||
13 18 99 17 94
|
||||
9 49 32 76 83
|
||||
7 84 45 59 5
|
||||
|
||||
35 37 38 28 91
|
||||
58 12 89 10 49
|
||||
60 2 36 18 15
|
||||
69 26 99 63 97
|
||||
90 20 95 61 51
|
||||
|
||||
94 54 69 46 36
|
||||
27 41 19 95 39
|
||||
89 18 76 12 35
|
||||
80 10 56 62 30
|
||||
90 91 28 64 81
|
||||
|
||||
18 59 38 71 82
|
||||
7 15 24 89 25
|
||||
95 70 87 34 63
|
||||
83 33 64 50 69
|
||||
57 32 56 93 1
|
||||
|
||||
2 35 87 96 11
|
||||
40 62 39 22 74
|
||||
19 8 58 33 6
|
||||
26 79 37 0 82
|
||||
30 88 5 47 72
|
||||
|
||||
23 72 44 17 80
|
||||
71 94 6 9 68
|
||||
81 53 87 46 40
|
||||
88 15 97 98 63
|
||||
45 0 43 21 28
|
||||
|
||||
8 33 6 38 12
|
||||
32 75 19 13 27
|
||||
5 58 51 61 42
|
||||
81 72 3 91 55
|
||||
37 97 79 87 30
|
||||
|
||||
46 55 24 32 63
|
||||
14 60 81 28 58
|
||||
10 91 13 69 57
|
||||
92 94 38 83 86
|
||||
84 82 11 35 16
|
||||
|
||||
33 86 85 61 66
|
||||
51 46 7 12 19
|
||||
92 32 69 5 26
|
||||
64 99 79 63 37
|
||||
4 52 54 38 16
|
||||
|
||||
34 48 19 54 46
|
||||
31 82 11 91 77
|
||||
98 38 30 69 26
|
||||
71 84 63 24 83
|
||||
60 53 50 20 57
|
||||
|
||||
31 54 46 50 65
|
||||
21 61 89 32 94
|
||||
28 7 72 23 18
|
||||
42 83 60 59 98
|
||||
3 82 30 75 14
|
||||
|
||||
39 96 58 25 86
|
||||
89 43 16 59 34
|
||||
19 33 82 93 74
|
||||
66 90 98 53 94
|
||||
36 81 84 99 17
|
||||
|
||||
8 80 2 82 46
|
||||
62 28 99 29 70
|
||||
78 6 13 53 72
|
||||
26 47 39 95 86
|
||||
76 91 19 41 84
|
||||
|
||||
36 8 4 50 25
|
||||
56 83 72 28 95
|
||||
43 74 46 70 5
|
||||
55 62 81 11 35
|
||||
40 44 82 69 71
|
||||
|
||||
54 26 15 74 0
|
||||
7 71 63 61 86
|
||||
18 79 65 57 14
|
||||
9 82 81 47 78
|
||||
24 12 20 10 76
|
||||
|
||||
54 37 6 41 31
|
||||
15 24 73 48 23
|
||||
84 53 94 28 26
|
||||
95 4 2 32 63
|
||||
99 74 20 64 57
|
||||
|
||||
18 82 17 12 50
|
||||
49 32 63 67 40
|
||||
1 31 61 26 24
|
||||
15 91 11 22 95
|
||||
44 87 19 43 48
|
||||
|
||||
18 75 5 59 74
|
||||
81 11 23 55 22
|
||||
20 3 32 30 40
|
||||
41 67 78 45 90
|
||||
92 72 71 48 28
|
||||
|
||||
11 83 57 66 68
|
||||
81 94 44 19 16
|
||||
62 77 46 64 13
|
||||
85 50 20 22 61
|
||||
12 76 86 17 97
|
||||
|
||||
52 71 57 82 38
|
||||
11 67 25 43 18
|
||||
42 34 19 1 50
|
||||
22 53 0 62 69
|
||||
27 77 88 33 65
|
||||
|
||||
87 31 73 71 3
|
||||
4 39 64 13 93
|
||||
91 82 75 43 35
|
||||
72 89 24 11 36
|
||||
32 79 80 17 98
|
||||
|
||||
56 50 78 98 37
|
||||
8 14 30 74 42
|
||||
10 95 21 44 48
|
||||
12 54 85 29 60
|
||||
65 1 3 89 25
|
||||
|
||||
85 93 31 59 44
|
||||
90 5 20 4 28
|
||||
6 63 83 10 27
|
||||
40 84 48 78 68
|
||||
72 82 71 61 52
|
||||
|
||||
72 84 48 77 86
|
||||
78 69 47 82 73
|
||||
45 70 0 11 49
|
||||
26 95 88 7 8
|
||||
62 12 96 15 44
|
||||
|
||||
86 92 29 0 49
|
||||
17 61 1 28 75
|
||||
46 13 42 14 23
|
||||
65 82 44 52 9
|
||||
41 19 37 63 83
|
||||
|
||||
27 70 79 26 36
|
||||
78 23 73 84 85
|
||||
75 32 41 14 87
|
||||
68 99 34 93 61
|
||||
62 86 49 9 77
|
||||
|
||||
88 50 27 48 23
|
||||
96 90 30 58 55
|
||||
29 17 3 22 49
|
||||
99 32 8 37 42
|
||||
13 81 87 2 53
|
||||
|
||||
15 51 10 87 88
|
||||
30 19 33 46 3
|
||||
67 13 44 7 91
|
||||
40 83 98 86 50
|
||||
95 80 4 35 11
|
||||
|
||||
79 26 92 61 24
|
||||
73 96 86 19 88
|
||||
54 98 46 14 48
|
||||
78 30 39 9 66
|
||||
56 40 11 41 1
|
||||
|
||||
37 0 63 71 57
|
||||
21 6 14 52 20
|
||||
16 36 83 76 92
|
||||
32 25 79 2 84
|
||||
27 89 34 99 3
|
||||
|
||||
74 31 87 53 20
|
||||
32 68 12 54 73
|
||||
97 70 57 83 7
|
||||
96 88 11 84 29
|
||||
23 8 9 48 65
|
||||
|
||||
95 0 91 41 39
|
||||
1 31 52 40 98
|
||||
32 59 45 84 61
|
||||
56 64 22 78 24
|
||||
51 94 50 74 35
|
||||
|
||||
31 39 36 5 92
|
||||
72 66 28 8 63
|
||||
7 20 85 55 79
|
||||
89 90 81 94 12
|
||||
59 44 40 65 46
|
||||
|
||||
80 2 7 61 34
|
||||
31 69 15 68 77
|
||||
85 17 8 26 38
|
||||
55 29 1 42 86
|
||||
28 78 66 59 23
|
||||
|
||||
77 56 1 73 7
|
||||
91 55 95 0 38
|
||||
90 19 40 74 52
|
||||
23 59 53 34 80
|
||||
72 50 54 96 5
|
||||
|
||||
88 44 64 57 9
|
||||
68 97 81 2 75
|
||||
37 27 25 96 42
|
||||
72 89 24 30 45
|
||||
93 69 86 76 19
|
||||
|
||||
78 46 55 84 77
|
||||
24 52 8 97 9
|
||||
5 73 4 3 71
|
||||
0 76 70 21 15
|
||||
33 87 38 98 63
|
||||
|
||||
68 4 32 82 34
|
||||
95 43 70 74 77
|
||||
23 89 94 61 22
|
||||
88 51 39 90 75
|
||||
56 9 65 29 79
|
||||
|
||||
23 11 51 45 1
|
||||
40 63 21 43 37
|
||||
64 28 84 22 9
|
||||
86 39 77 48 61
|
||||
10 13 15 60 79
|
||||
|
||||
72 34 84 54 65
|
||||
53 58 22 38 46
|
||||
42 33 60 85 9
|
||||
97 59 28 40 10
|
||||
12 6 19 92 4
|
||||
|
||||
39 43 23 79 29
|
||||
33 1 24 88 8
|
||||
61 90 73 92 97
|
||||
95 86 77 99 27
|
||||
25 41 69 70 64
|
||||
|
||||
92 57 85 51 75
|
||||
43 38 83 47 94
|
||||
52 5 98 1 25
|
||||
35 46 15 34 64
|
||||
71 31 53 65 7
|
||||
|
||||
89 74 98 37 64
|
||||
51 85 33 38 96
|
||||
54 41 11 52 86
|
||||
2 99 25 17 26
|
||||
35 57 95 79 6
|
||||
|
||||
67 2 10 69 32
|
||||
16 27 76 92 90
|
||||
49 79 14 61 84
|
||||
43 8 75 56 31
|
||||
21 77 36 86 13
|
||||
|
||||
35 60 79 33 43
|
||||
72 3 20 74 57
|
||||
98 76 38 17 51
|
||||
14 4 12 10 90
|
||||
6 55 5 93 36
|
||||
|
||||
48 99 10 61 98
|
||||
62 24 3 21 30
|
||||
0 11 32 9 29
|
||||
41 38 16 88 74
|
||||
22 1 7 5 40
|
||||
|
||||
70 41 95 11 57
|
||||
40 16 0 21 80
|
||||
30 9 34 92 98
|
||||
72 60 64 85 61
|
||||
31 33 93 58 90
|
||||
|
||||
81 18 72 37 52
|
||||
62 0 46 57 64
|
||||
6 34 33 20 22
|
||||
86 87 83 31 75
|
||||
50 84 8 5 73
|
||||
|
||||
50 86 31 25 27
|
||||
20 5 54 95 53
|
||||
89 68 41 70 32
|
||||
93 84 11 74 22
|
||||
44 83 8 60 36
|
||||
|
||||
70 99 54 57 80
|
||||
87 75 38 37 46
|
||||
31 56 61 44 82
|
||||
63 74 27 19 78
|
||||
69 6 36 62 83
|
||||
|
||||
94 9 73 97 6
|
||||
55 90 60 11 89
|
||||
18 65 68 45 35
|
||||
88 14 10 58 93
|
||||
77 75 96 69 25
|
||||
|
||||
46 25 9 57 38
|
||||
74 86 69 62 63
|
||||
65 44 47 77 17
|
||||
6 72 66 78 3
|
||||
27 84 85 94 30
|
||||
|
||||
52 32 41 55 76
|
||||
93 22 69 36 26
|
||||
31 49 72 33 46
|
||||
10 4 11 34 37
|
||||
75 23 29 85 57
|
||||
|
||||
15 38 98 76 95
|
||||
4 48 39 35 58
|
||||
19 44 55 17 94
|
||||
37 16 61 28 49
|
||||
33 79 67 54 96
|
||||
|
||||
64 6 81 22 83
|
||||
28 3 89 49 1
|
||||
41 25 8 18 17
|
||||
14 26 76 48 75
|
||||
56 24 60 68 67
|
||||
|
||||
18 84 1 37 97
|
||||
92 38 79 23 45
|
||||
39 59 17 62 77
|
||||
13 36 5 90 71
|
||||
51 21 94 34 70
|
||||
|
||||
24 76 65 37 64
|
||||
75 0 79 53 6
|
||||
32 46 55 27 81
|
||||
23 45 86 96 15
|
||||
99 5 95 59 82
|
||||
|
||||
8 36 61 47 91
|
||||
75 57 92 21 60
|
||||
63 2 83 99 32
|
||||
16 82 26 43 68
|
||||
48 52 20 90 64
|
||||
|
||||
20 64 15 9 98
|
||||
54 18 19 28 46
|
||||
87 36 84 99 80
|
||||
5 66 68 60 7
|
||||
56 94 52 74 77
|
||||
|
||||
96 54 11 8 70
|
||||
14 97 23 30 9
|
||||
75 83 35 32 41
|
||||
64 85 37 2 66
|
||||
56 89 71 44 25
|
||||
|
||||
44 67 40 37 82
|
||||
87 54 6 65 92
|
||||
59 50 17 90 85
|
||||
73 41 16 69 98
|
||||
24 21 94 80 13
|
||||
|
||||
94 67 5 91 47
|
||||
59 23 0 10 54
|
||||
41 16 92 74 86
|
||||
87 60 56 34 82
|
||||
75 15 40 33 28
|
||||
|
||||
1 6 53 31 42
|
||||
46 57 40 75 92
|
||||
10 39 27 48 5
|
||||
91 72 68 41 90
|
||||
13 70 44 58 93
|
||||
|
||||
96 15 55 98 85
|
||||
45 68 24 57 31
|
||||
12 94 35 84 41
|
||||
80 10 66 38 25
|
||||
48 8 26 40 69
|
||||
|
||||
11 64 5 4 68
|
||||
44 97 52 96 87
|
||||
6 22 27 47 94
|
||||
78 79 84 54 24
|
||||
89 16 77 37 20
|
||||
|
||||
80 73 21 62 64
|
||||
30 86 15 26 91
|
||||
45 69 37 17 84
|
||||
78 41 47 67 33
|
||||
82 6 79 20 83
|
||||
|
||||
85 43 18 19 76
|
||||
1 88 80 89 27
|
||||
11 67 63 20 68
|
||||
56 23 10 95 6
|
||||
32 70 64 0 15
|
||||
|
||||
1 2 64 84 52
|
||||
85 36 22 72 68
|
||||
91 19 24 25 17
|
||||
0 30 74 77 76
|
||||
60 75 57 45 95
|
||||
|
||||
61 39 37 58 45
|
||||
40 75 10 71 32
|
||||
74 57 4 30 19
|
||||
6 70 49 11 56
|
||||
64 36 60 66 63
|
||||
|
||||
67 7 36 94 34
|
||||
92 86 74 59 62
|
||||
72 43 40 28 21
|
||||
52 63 96 93 2
|
||||
8 82 50 53 42
|
||||
|
||||
16 64 31 0 23
|
||||
3 65 59 46 54
|
||||
52 78 20 29 50
|
||||
91 21 93 34 7
|
||||
8 28 30 86 37
|
||||
|
||||
27 76 75 60 99
|
||||
63 26 4 59 31
|
||||
10 5 98 39 78
|
||||
24 43 48 6 45
|
||||
0 18 82 22 35
|
||||
|
||||
21 48 58 4 31
|
||||
50 6 98 43 41
|
||||
88 80 24 35 40
|
||||
14 45 61 10 81
|
||||
97 27 46 8 20
|
||||
|
||||
36 17 86 84 56
|
||||
82 55 99 35 75
|
||||
64 94 92 53 31
|
||||
42 19 29 1 23
|
||||
76 21 11 28 66
|
||||
|
||||
90 92 40 41 68
|
||||
37 89 5 60 16
|
||||
48 25 59 45 29
|
||||
15 75 11 30 72
|
||||
6 61 74 23 85
|
||||
|
||||
37 47 13 68 40
|
||||
38 92 78 83 27
|
||||
82 81 85 35 31
|
||||
25 80 2 77 67
|
||||
55 7 72 26 22
|
||||
|
||||
30 13 80 26 86
|
||||
4 69 62 72 87
|
||||
97 21 99 10 24
|
||||
61 53 42 93 32
|
||||
67 64 15 16 27
|
||||
|
||||
95 13 68 86 39
|
||||
2 14 81 60 93
|
||||
45 69 20 23 59
|
||||
46 35 36 89 3
|
||||
5 42 29 71 49
|
||||
|
||||
99 49 50 92 56
|
||||
48 59 76 82 20
|
||||
11 53 51 86 10
|
||||
8 91 21 52 94
|
||||
12 39 31 40 22
|
||||
|
||||
50 17 6 12 19
|
||||
45 47 22 73 36
|
||||
16 78 98 89 72
|
||||
90 96 56 68 54
|
||||
28 29 51 85 25
|
||||
|
||||
91 72 10 32 20
|
||||
23 18 44 78 61
|
||||
46 36 77 60 75
|
||||
47 49 16 89 8
|
||||
2 95 48 38 85
|
||||
Reference in New Issue
Block a user