Compare commits
4 commits
b7362b4889
...
f42799b6c8
Author | SHA1 | Date | |
---|---|---|---|
Bruno BELANYI | f42799b6c8 | ||
Bruno BELANYI | f8a4ffa90d | ||
Bruno BELANYI | 5766f226a1 | ||
Bruno BELANYI | 7ba2723a40 |
59
2021/d04/ex1/ex1.py
Executable file
59
2021/d04/ex1/ex1.py
Executable file
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import itertools
|
||||
import sys
|
||||
from typing import List, Tuple
|
||||
|
||||
Board = List[List[int]]
|
||||
|
||||
|
||||
def solve(input: List[str]) -> int:
|
||||
def parse_input() -> Tuple[List[int], List[Board]]:
|
||||
def listify(line: str, delim: str = " ") -> List[int]:
|
||||
return [int(n) for n in line.split(delim) if n != ""]
|
||||
|
||||
draw_order = listify(input[0], delim=",")
|
||||
boards: List[Board] = []
|
||||
for l in input[1:]:
|
||||
if l == "":
|
||||
boards.append([])
|
||||
continue
|
||||
boards[-1].append(listify(l))
|
||||
|
||||
return draw_order, boards
|
||||
|
||||
def bingo(board: Board, draw: List[int]) -> bool:
|
||||
assert len(board) == len(board[0])
|
||||
|
||||
def line(l: int) -> bool:
|
||||
return all(n in draw for n in board[l])
|
||||
|
||||
def row(r: int) -> bool:
|
||||
return all(board[i][r] in draw for i in range(len(board)))
|
||||
|
||||
lines = [line(i) for i in range(len(board))]
|
||||
rows = [row(i) for i in range(len(board[0]))]
|
||||
|
||||
return any(itertools.chain(lines, rows))
|
||||
|
||||
draw_order, boards = parse_input()
|
||||
|
||||
draw = []
|
||||
for d in draw_order:
|
||||
draw.append(d)
|
||||
for b in boards:
|
||||
if not bingo(b, draw):
|
||||
continue
|
||||
return d * sum(n for n in itertools.chain.from_iterable(b) if n not in draw)
|
||||
|
||||
# Sanity check
|
||||
assert False
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = [line.strip() for line in sys.stdin.readlines()]
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
601
2021/d04/ex1/input
Normal file
601
2021/d04/ex1/input
Normal file
|
@ -0,0 +1,601 @@
|
|||
85,84,30,15,46,71,64,45,13,90,63,89,62,25,87,68,73,47,65,78,2,27,67,95,88,99,96,17,42,31,91,98,57,28,38,93,43,0,55,49,22,24,82,54,59,52,3,26,9,32,4,48,39,50,80,21,5,1,23,10,58,34,12,35,74,8,6,79,40,76,86,69,81,61,14,92,97,19,7,51,33,11,77,75,20,70,29,36,60,18,56,37,72,41,94,44,83,66,16,53
|
||||
|
||||
78 13 8 62 67
|
||||
42 89 97 16 65
|
||||
5 12 73 50 56
|
||||
45 10 63 41 64
|
||||
49 1 95 71 17
|
||||
|
||||
60 25 66 82 22
|
||||
94 45 68 5 12
|
||||
46 44 48 31 34
|
||||
10 56 37 96 81
|
||||
99 39 84 32 6
|
||||
|
||||
11 86 77 36 2
|
||||
57 68 27 74 4
|
||||
81 92 49 37 51
|
||||
78 43 94 46 63
|
||||
13 52 72 17 44
|
||||
|
||||
88 13 81 21 20
|
||||
80 99 23 37 53
|
||||
44 68 15 38 55
|
||||
84 48 82 97 6
|
||||
4 43 52 72 31
|
||||
|
||||
39 62 45 86 44
|
||||
12 17 16 7 6
|
||||
84 42 82 34 85
|
||||
19 77 9 48 98
|
||||
21 99 67 26 69
|
||||
|
||||
1 75 50 5 44
|
||||
3 28 62 17 43
|
||||
14 52 64 77 81
|
||||
32 89 7 11 70
|
||||
38 36 71 45 58
|
||||
|
||||
53 32 35 69 63
|
||||
6 21 75 64 96
|
||||
10 89 15 48 26
|
||||
23 20 43 57 33
|
||||
18 49 51 47 74
|
||||
|
||||
20 79 9 74 13
|
||||
52 28 77 26 43
|
||||
57 83 4 25 70
|
||||
90 1 30 53 38
|
||||
56 66 82 35 51
|
||||
|
||||
12 3 31 93 8
|
||||
20 27 51 78 9
|
||||
29 46 82 85 75
|
||||
15 76 91 70 63
|
||||
59 39 13 43 79
|
||||
|
||||
46 35 15 13 2
|
||||
65 69 97 77 87
|
||||
64 59 94 88 40
|
||||
34 79 92 93 58
|
||||
47 28 74 82 29
|
||||
|
||||
32 38 24 68 12
|
||||
8 78 79 89 43
|
||||
67 54 6 98 48
|
||||
1 14 83 15 37
|
||||
44 10 97 74 33
|
||||
|
||||
9 95 2 99 1
|
||||
8 42 60 56 40
|
||||
32 11 71 14 80
|
||||
77 6 68 46 48
|
||||
98 70 39 44 62
|
||||
|
||||
43 94 41 13 15
|
||||
96 99 35 27 8
|
||||
22 75 73 17 90
|
||||
62 23 5 88 3
|
||||
10 52 61 60 57
|
||||
|
||||
31 62 74 3 79
|
||||
15 49 60 28 71
|
||||
66 2 11 36 41
|
||||
34 80 33 94 75
|
||||
64 56 84 70 16
|
||||
|
||||
98 94 68 32 26
|
||||
61 7 52 66 18
|
||||
40 20 82 81 74
|
||||
28 36 89 14 35
|
||||
71 11 44 13 72
|
||||
|
||||
81 30 6 86 37
|
||||
46 45 64 83 62
|
||||
7 70 38 51 15
|
||||
91 41 26 40 4
|
||||
87 0 82 74 60
|
||||
|
||||
83 99 26 69 1
|
||||
6 98 53 31 43
|
||||
82 64 42 90 34
|
||||
87 62 11 40 39
|
||||
77 51 2 30 97
|
||||
|
||||
96 5 24 44 32
|
||||
48 92 78 74 76
|
||||
99 33 93 97 49
|
||||
45 8 88 66 59
|
||||
52 64 29 60 82
|
||||
|
||||
69 23 59 96 71
|
||||
14 93 21 44 62
|
||||
65 84 2 39 1
|
||||
0 68 38 81 4
|
||||
48 31 26 60 34
|
||||
|
||||
24 46 44 52 98
|
||||
65 23 31 89 5
|
||||
34 79 75 96 41
|
||||
76 28 90 12 11
|
||||
68 29 38 70 50
|
||||
|
||||
51 0 45 23 20
|
||||
44 49 12 31 7
|
||||
41 26 46 75 92
|
||||
90 30 72 95 55
|
||||
87 57 10 99 40
|
||||
|
||||
25 67 80 74 44
|
||||
3 82 27 81 11
|
||||
33 42 97 57 70
|
||||
19 94 0 2 49
|
||||
6 90 60 29 58
|
||||
|
||||
79 59 96 68 14
|
||||
38 70 65 66 69
|
||||
36 75 20 18 29
|
||||
64 88 35 61 43
|
||||
57 76 62 23 25
|
||||
|
||||
60 9 81 94 62
|
||||
73 20 87 72 14
|
||||
95 63 42 51 13
|
||||
75 83 32 30 66
|
||||
97 6 80 82 17
|
||||
|
||||
3 88 31 43 68
|
||||
20 78 47 10 91
|
||||
14 42 40 74 39
|
||||
5 32 16 97 1
|
||||
9 33 49 70 36
|
||||
|
||||
77 31 65 27 52
|
||||
49 74 57 25 66
|
||||
24 4 39 33 1
|
||||
23 14 19 2 21
|
||||
80 71 29 81 91
|
||||
|
||||
32 68 47 3 88
|
||||
1 97 99 28 80
|
||||
2 25 18 31 51
|
||||
26 10 73 34 40
|
||||
8 55 45 36 37
|
||||
|
||||
79 81 33 94 51
|
||||
84 4 91 0 69
|
||||
49 80 35 67 20
|
||||
98 48 64 38 30
|
||||
25 83 45 97 42
|
||||
|
||||
18 5 84 94 50
|
||||
36 47 2 52 65
|
||||
39 77 83 37 80
|
||||
51 88 15 12 31
|
||||
87 17 68 48 67
|
||||
|
||||
39 95 30 8 86
|
||||
45 57 40 51 60
|
||||
85 88 33 93 25
|
||||
76 52 37 68 6
|
||||
11 80 69 19 71
|
||||
|
||||
6 71 25 66 54
|
||||
33 17 98 63 20
|
||||
27 14 44 43 18
|
||||
68 10 50 35 65
|
||||
61 3 83 12 13
|
||||
|
||||
46 21 43 15 19
|
||||
99 82 8 95 80
|
||||
1 10 45 58 53
|
||||
23 94 50 66 52
|
||||
57 98 26 77 90
|
||||
|
||||
11 50 55 28 79
|
||||
4 3 26 57 56
|
||||
68 86 10 87 69
|
||||
32 35 89 63 29
|
||||
66 27 33 8 30
|
||||
|
||||
23 34 94 93 47
|
||||
7 71 9 52 50
|
||||
45 79 13 43 86
|
||||
0 51 17 6 26
|
||||
4 82 44 38 37
|
||||
|
||||
49 24 16 64 32
|
||||
46 84 3 29 51
|
||||
71 82 33 61 26
|
||||
15 5 94 86 41
|
||||
63 36 10 67 43
|
||||
|
||||
94 17 3 71 91
|
||||
93 50 88 36 27
|
||||
54 68 7 8 34
|
||||
9 92 37 45 52
|
||||
47 29 70 10 69
|
||||
|
||||
79 27 30 0 12
|
||||
51 70 19 89 20
|
||||
2 42 64 21 49
|
||||
48 39 1 3 56
|
||||
98 35 95 82 72
|
||||
|
||||
91 71 65 95 44
|
||||
26 72 92 59 43
|
||||
61 93 6 4 90
|
||||
76 31 8 1 29
|
||||
82 64 89 22 45
|
||||
|
||||
55 4 1 42 87
|
||||
88 34 67 83 45
|
||||
22 23 98 24 12
|
||||
74 72 49 32 25
|
||||
73 7 19 26 3
|
||||
|
||||
0 43 50 57 80
|
||||
68 21 87 1 91
|
||||
60 6 81 78 99
|
||||
35 98 72 49 16
|
||||
36 25 13 48 22
|
||||
|
||||
59 1 26 3 71
|
||||
43 55 50 7 16
|
||||
5 64 29 38 84
|
||||
41 23 60 19 24
|
||||
85 58 49 98 33
|
||||
|
||||
80 48 3 65 38
|
||||
30 97 96 45 7
|
||||
6 85 8 90 40
|
||||
37 78 84 16 24
|
||||
69 11 43 64 63
|
||||
|
||||
28 14 19 1 97
|
||||
37 39 86 23 64
|
||||
20 67 85 65 90
|
||||
54 51 59 91 43
|
||||
17 30 11 24 7
|
||||
|
||||
22 88 27 43 10
|
||||
35 3 72 52 57
|
||||
61 54 28 69 37
|
||||
71 78 96 82 81
|
||||
33 39 32 40 7
|
||||
|
||||
50 60 69 33 57
|
||||
84 22 95 74 6
|
||||
90 94 71 45 68
|
||||
72 86 77 9 24
|
||||
73 12 89 13 1
|
||||
|
||||
66 35 36 87 73
|
||||
77 96 52 47 68
|
||||
63 4 83 20 95
|
||||
17 70 9 18 50
|
||||
98 40 25 60 26
|
||||
|
||||
31 37 81 34 56
|
||||
3 15 43 51 35
|
||||
67 70 1 20 12
|
||||
80 54 69 17 88
|
||||
65 91 60 8 53
|
||||
|
||||
76 23 87 41 18
|
||||
49 58 92 98 25
|
||||
77 53 44 17 27
|
||||
67 28 37 66 95
|
||||
59 39 33 4 34
|
||||
|
||||
0 25 2 5 22
|
||||
26 85 90 51 21
|
||||
31 79 10 41 45
|
||||
69 56 1 67 40
|
||||
59 98 99 89 6
|
||||
|
||||
95 67 72 52 78
|
||||
88 61 96 11 43
|
||||
34 73 53 54 8
|
||||
71 3 70 42 58
|
||||
12 82 97 68 98
|
||||
|
||||
20 10 13 74 89
|
||||
82 25 45 92 61
|
||||
58 62 0 22 57
|
||||
68 90 36 18 75
|
||||
48 39 69 4 52
|
||||
|
||||
40 3 86 33 98
|
||||
30 67 39 7 69
|
||||
80 64 77 54 51
|
||||
24 49 6 68 61
|
||||
62 94 1 26 50
|
||||
|
||||
89 88 7 21 87
|
||||
83 10 78 27 97
|
||||
35 62 86 13 38
|
||||
28 80 19 36 75
|
||||
98 93 47 33 57
|
||||
|
||||
22 88 35 79 85
|
||||
98 96 89 69 17
|
||||
37 62 57 39 1
|
||||
99 10 55 50 71
|
||||
65 94 67 4 63
|
||||
|
||||
7 83 51 95 98
|
||||
56 93 62 85 9
|
||||
72 14 44 70 67
|
||||
42 4 65 37 54
|
||||
47 82 1 60 55
|
||||
|
||||
0 73 60 25 64
|
||||
90 11 93 85 89
|
||||
80 97 86 76 96
|
||||
43 92 88 72 44
|
||||
62 87 81 34 49
|
||||
|
||||
47 27 89 98 68
|
||||
86 76 14 96 17
|
||||
21 4 41 74 29
|
||||
18 82 33 34 20
|
||||
30 62 95 42 51
|
||||
|
||||
45 4 70 20 53
|
||||
66 39 43 82 1
|
||||
54 30 68 77 42
|
||||
61 41 65 94 35
|
||||
25 78 22 26 46
|
||||
|
||||
70 73 44 48 61
|
||||
69 7 85 47 89
|
||||
91 22 12 98 11
|
||||
25 60 58 46 54
|
||||
5 37 83 62 65
|
||||
|
||||
47 62 30 70 40
|
||||
86 9 64 61 0
|
||||
27 63 90 88 17
|
||||
18 71 42 33 93
|
||||
91 14 81 4 31
|
||||
|
||||
81 7 22 94 55
|
||||
99 90 60 9 46
|
||||
65 2 47 1 73
|
||||
78 76 75 19 88
|
||||
63 51 86 56 49
|
||||
|
||||
25 27 12 22 30
|
||||
87 75 16 4 32
|
||||
19 73 5 20 52
|
||||
18 6 34 94 31
|
||||
23 96 84 26 66
|
||||
|
||||
23 69 51 35 5
|
||||
13 76 99 89 82
|
||||
88 3 50 54 33
|
||||
19 59 92 84 34
|
||||
64 80 42 40 60
|
||||
|
||||
15 91 92 60 36
|
||||
46 40 53 34 27
|
||||
13 35 96 16 42
|
||||
4 61 81 56 24
|
||||
85 21 7 99 20
|
||||
|
||||
32 37 19 21 28
|
||||
66 7 96 46 88
|
||||
23 52 25 50 22
|
||||
53 62 34 81 27
|
||||
98 31 14 40 49
|
||||
|
||||
23 43 71 61 12
|
||||
8 94 91 74 7
|
||||
67 2 59 77 4
|
||||
39 18 97 41 21
|
||||
55 15 31 9 38
|
||||
|
||||
29 69 52 16 75
|
||||
71 15 34 79 86
|
||||
62 57 48 44 54
|
||||
11 32 96 13 60
|
||||
56 77 26 68 82
|
||||
|
||||
93 57 21 94 31
|
||||
29 4 59 24 40
|
||||
13 99 34 96 91
|
||||
70 55 47 62 51
|
||||
33 32 19 69 71
|
||||
|
||||
76 80 1 57 20
|
||||
13 28 72 27 79
|
||||
40 21 71 37 85
|
||||
26 12 67 33 99
|
||||
11 41 62 18 64
|
||||
|
||||
23 22 92 69 86
|
||||
38 79 47 56 83
|
||||
74 46 1 95 24
|
||||
93 71 28 54 52
|
||||
94 51 33 57 73
|
||||
|
||||
17 96 4 81 76
|
||||
67 20 24 21 70
|
||||
28 77 3 74 10
|
||||
45 78 18 7 15
|
||||
8 48 27 58 13
|
||||
|
||||
51 58 59 73 35
|
||||
13 7 92 15 98
|
||||
75 26 1 49 24
|
||||
91 85 44 34 74
|
||||
64 2 20 72 90
|
||||
|
||||
46 89 50 54 79
|
||||
9 60 98 36 78
|
||||
91 16 80 92 20
|
||||
77 69 13 76 75
|
||||
95 41 45 3 40
|
||||
|
||||
86 7 67 20 99
|
||||
14 18 97 70 0
|
||||
81 27 89 30 3
|
||||
39 37 56 42 32
|
||||
35 71 49 8 73
|
||||
|
||||
60 67 61 6 86
|
||||
25 41 24 29 88
|
||||
98 3 90 56 87
|
||||
45 22 84 70 99
|
||||
53 59 27 26 57
|
||||
|
||||
17 4 11 41 66
|
||||
28 39 27 54 89
|
||||
3 78 37 93 29
|
||||
95 23 86 51 40
|
||||
75 67 71 57 92
|
||||
|
||||
60 41 91 89 52
|
||||
68 46 83 62 1
|
||||
18 21 72 19 35
|
||||
55 34 11 16 75
|
||||
32 71 61 78 50
|
||||
|
||||
27 38 70 48 93
|
||||
16 2 80 17 63
|
||||
97 89 55 86 85
|
||||
54 5 41 33 60
|
||||
51 95 12 67 37
|
||||
|
||||
72 17 74 6 41
|
||||
53 19 8 12 92
|
||||
39 84 82 63 48
|
||||
22 21 87 13 32
|
||||
40 34 64 15 31
|
||||
|
||||
75 2 46 64 99
|
||||
26 72 79 90 76
|
||||
85 68 10 28 67
|
||||
20 34 81 12 83
|
||||
92 1 65 43 71
|
||||
|
||||
49 80 85 54 9
|
||||
31 40 22 94 51
|
||||
12 73 43 68 98
|
||||
78 91 70 3 28
|
||||
47 59 69 99 62
|
||||
|
||||
46 56 28 73 20
|
||||
5 29 69 68 22
|
||||
64 12 8 52 92
|
||||
36 44 90 72 0
|
||||
76 48 33 86 66
|
||||
|
||||
99 61 97 17 74
|
||||
32 52 44 42 9
|
||||
57 67 36 41 31
|
||||
68 1 50 22 11
|
||||
73 12 21 48 62
|
||||
|
||||
44 53 77 88 87
|
||||
27 99 59 98 74
|
||||
33 66 51 14 34
|
||||
29 30 60 49 80
|
||||
47 84 36 12 71
|
||||
|
||||
29 89 54 59 70
|
||||
87 65 77 38 25
|
||||
40 17 41 9 30
|
||||
45 27 0 5 24
|
||||
52 8 35 68 10
|
||||
|
||||
16 41 66 87 76
|
||||
94 70 51 48 96
|
||||
90 73 98 89 91
|
||||
4 46 30 28 63
|
||||
68 45 37 80 57
|
||||
|
||||
19 11 46 41 14
|
||||
94 48 66 86 9
|
||||
42 90 56 70 21
|
||||
95 54 74 30 87
|
||||
81 89 49 60 34
|
||||
|
||||
18 90 79 64 98
|
||||
27 74 59 53 11
|
||||
96 45 17 14 23
|
||||
9 60 30 42 12
|
||||
97 21 31 5 41
|
||||
|
||||
98 63 51 92 64
|
||||
55 30 46 22 91
|
||||
8 73 61 57 67
|
||||
37 60 49 31 10
|
||||
80 99 77 11 82
|
||||
|
||||
52 69 77 41 8
|
||||
94 11 78 62 28
|
||||
91 39 96 79 3
|
||||
44 88 37 0 47
|
||||
6 80 49 98 48
|
||||
|
||||
93 2 70 26 4
|
||||
47 8 94 12 3
|
||||
10 7 24 40 23
|
||||
49 84 50 56 44
|
||||
41 53 96 1 85
|
||||
|
||||
76 78 70 24 75
|
||||
71 19 85 77 25
|
||||
21 44 58 45 64
|
||||
40 38 9 50 61
|
||||
79 42 86 37 6
|
||||
|
||||
34 39 94 84 0
|
||||
90 80 78 54 49
|
||||
13 81 87 60 56
|
||||
74 59 75 41 28
|
||||
29 67 66 44 20
|
||||
|
||||
50 66 43 39 16
|
||||
88 94 60 70 64
|
||||
63 80 56 69 36
|
||||
53 48 32 22 79
|
||||
59 77 20 30 67
|
||||
|
||||
70 56 80 12 11
|
||||
35 55 40 71 87
|
||||
84 27 96 46 85
|
||||
20 23 26 29 14
|
||||
58 37 21 75 68
|
||||
|
||||
78 23 13 37 94
|
||||
65 44 54 43 38
|
||||
29 60 83 1 57
|
||||
98 2 75 12 14
|
||||
92 25 48 9 52
|
||||
|
||||
64 37 93 48 34
|
||||
22 81 58 5 13
|
||||
63 80 2 67 53
|
||||
62 52 79 41 44
|
||||
83 75 96 91 88
|
||||
|
||||
1 54 88 45 90
|
||||
81 78 19 8 40
|
||||
17 74 69 87 33
|
||||
9 64 85 50 71
|
||||
92 38 65 82 41
|
||||
|
||||
2 62 96 60 81
|
||||
51 1 34 48 25
|
||||
78 13 74 65 42
|
||||
46 64 57 19 72
|
||||
85 88 53 68 76
|
||||
|
||||
57 95 40 92 27
|
||||
65 37 42 90 9
|
||||
17 72 78 43 45
|
||||
87 28 48 81 79
|
||||
7 4 24 67 70
|
69
2021/d04/ex2/ex2.py
Executable file
69
2021/d04/ex2/ex2.py
Executable file
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import itertools
|
||||
import sys
|
||||
from typing import List, Tuple
|
||||
|
||||
Board = List[List[int]]
|
||||
|
||||
|
||||
def solve(input: List[str]) -> int:
|
||||
def parse_input() -> Tuple[List[int], List[Board]]:
|
||||
def listify(line: str, delim: str = " ") -> List[int]:
|
||||
return [int(n) for n in line.split(delim) if n != ""]
|
||||
|
||||
draw_order = listify(input[0], delim=",")
|
||||
boards: List[Board] = []
|
||||
for l in input[1:]:
|
||||
if l == "":
|
||||
boards.append([])
|
||||
continue
|
||||
boards[-1].append(listify(l))
|
||||
|
||||
return draw_order, boards
|
||||
|
||||
def bingo(board: Board, draw: List[int]) -> bool:
|
||||
assert len(board) == len(board[0])
|
||||
|
||||
def line(l: int) -> bool:
|
||||
return all(n in draw for n in board[l])
|
||||
|
||||
def row(r: int) -> bool:
|
||||
return all(board[i][r] in draw for i in range(len(board)))
|
||||
|
||||
lines = [line(i) for i in range(len(board))]
|
||||
rows = [row(i) for i in range(len(board[0]))]
|
||||
|
||||
return any(itertools.chain(lines, rows))
|
||||
|
||||
draw_order, boards = parse_input()
|
||||
|
||||
draw = []
|
||||
losers = set(range(len(boards)))
|
||||
|
||||
for d in draw_order:
|
||||
draw.append(d)
|
||||
for i, b in enumerate(boards):
|
||||
# Stop early if we already know this board wins
|
||||
if i not in losers:
|
||||
continue
|
||||
if not bingo(b, draw):
|
||||
continue
|
||||
# Discard winners until the last one
|
||||
if len(losers) != 1:
|
||||
losers.discard(i)
|
||||
continue
|
||||
# At thid point, we must be looking at the last winning board
|
||||
return d * sum(n for n in itertools.chain.from_iterable(b) if n not in draw)
|
||||
|
||||
# Sanity check
|
||||
assert False
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = [line.strip() for line in sys.stdin.readlines()]
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
601
2021/d04/ex2/input
Normal file
601
2021/d04/ex2/input
Normal file
|
@ -0,0 +1,601 @@
|
|||
85,84,30,15,46,71,64,45,13,90,63,89,62,25,87,68,73,47,65,78,2,27,67,95,88,99,96,17,42,31,91,98,57,28,38,93,43,0,55,49,22,24,82,54,59,52,3,26,9,32,4,48,39,50,80,21,5,1,23,10,58,34,12,35,74,8,6,79,40,76,86,69,81,61,14,92,97,19,7,51,33,11,77,75,20,70,29,36,60,18,56,37,72,41,94,44,83,66,16,53
|
||||
|
||||
78 13 8 62 67
|
||||
42 89 97 16 65
|
||||
5 12 73 50 56
|
||||
45 10 63 41 64
|
||||
49 1 95 71 17
|
||||
|
||||
60 25 66 82 22
|
||||
94 45 68 5 12
|
||||
46 44 48 31 34
|
||||
10 56 37 96 81
|
||||
99 39 84 32 6
|
||||
|
||||
11 86 77 36 2
|
||||
57 68 27 74 4
|
||||
81 92 49 37 51
|
||||
78 43 94 46 63
|
||||
13 52 72 17 44
|
||||
|
||||
88 13 81 21 20
|
||||
80 99 23 37 53
|
||||
44 68 15 38 55
|
||||
84 48 82 97 6
|
||||
4 43 52 72 31
|
||||
|
||||
39 62 45 86 44
|
||||
12 17 16 7 6
|
||||
84 42 82 34 85
|
||||
19 77 9 48 98
|
||||
21 99 67 26 69
|
||||
|
||||
1 75 50 5 44
|
||||
3 28 62 17 43
|
||||
14 52 64 77 81
|
||||
32 89 7 11 70
|
||||
38 36 71 45 58
|
||||
|
||||
53 32 35 69 63
|
||||
6 21 75 64 96
|
||||
10 89 15 48 26
|
||||
23 20 43 57 33
|
||||
18 49 51 47 74
|
||||
|
||||
20 79 9 74 13
|
||||
52 28 77 26 43
|
||||
57 83 4 25 70
|
||||
90 1 30 53 38
|
||||
56 66 82 35 51
|
||||
|
||||
12 3 31 93 8
|
||||
20 27 51 78 9
|
||||
29 46 82 85 75
|
||||
15 76 91 70 63
|
||||
59 39 13 43 79
|
||||
|
||||
46 35 15 13 2
|
||||
65 69 97 77 87
|
||||
64 59 94 88 40
|
||||
34 79 92 93 58
|
||||
47 28 74 82 29
|
||||
|
||||
32 38 24 68 12
|
||||
8 78 79 89 43
|
||||
67 54 6 98 48
|
||||
1 14 83 15 37
|
||||
44 10 97 74 33
|
||||
|
||||
9 95 2 99 1
|
||||
8 42 60 56 40
|
||||
32 11 71 14 80
|
||||
77 6 68 46 48
|
||||
98 70 39 44 62
|
||||
|
||||
43 94 41 13 15
|
||||
96 99 35 27 8
|
||||
22 75 73 17 90
|
||||
62 23 5 88 3
|
||||
10 52 61 60 57
|
||||
|
||||
31 62 74 3 79
|
||||
15 49 60 28 71
|
||||
66 2 11 36 41
|
||||
34 80 33 94 75
|
||||
64 56 84 70 16
|
||||
|
||||
98 94 68 32 26
|
||||
61 7 52 66 18
|
||||
40 20 82 81 74
|
||||
28 36 89 14 35
|
||||
71 11 44 13 72
|
||||
|
||||
81 30 6 86 37
|
||||
46 45 64 83 62
|
||||
7 70 38 51 15
|
||||
91 41 26 40 4
|
||||
87 0 82 74 60
|
||||
|
||||
83 99 26 69 1
|
||||
6 98 53 31 43
|
||||
82 64 42 90 34
|
||||
87 62 11 40 39
|
||||
77 51 2 30 97
|
||||
|
||||
96 5 24 44 32
|
||||
48 92 78 74 76
|
||||
99 33 93 97 49
|
||||
45 8 88 66 59
|
||||
52 64 29 60 82
|
||||
|
||||
69 23 59 96 71
|
||||
14 93 21 44 62
|
||||
65 84 2 39 1
|
||||
0 68 38 81 4
|
||||
48 31 26 60 34
|
||||
|
||||
24 46 44 52 98
|
||||
65 23 31 89 5
|
||||
34 79 75 96 41
|
||||
76 28 90 12 11
|
||||
68 29 38 70 50
|
||||
|
||||
51 0 45 23 20
|
||||
44 49 12 31 7
|
||||
41 26 46 75 92
|
||||
90 30 72 95 55
|
||||
87 57 10 99 40
|
||||
|
||||
25 67 80 74 44
|
||||
3 82 27 81 11
|
||||
33 42 97 57 70
|
||||
19 94 0 2 49
|
||||
6 90 60 29 58
|
||||
|
||||
79 59 96 68 14
|
||||
38 70 65 66 69
|
||||
36 75 20 18 29
|
||||
64 88 35 61 43
|
||||
57 76 62 23 25
|
||||
|
||||
60 9 81 94 62
|
||||
73 20 87 72 14
|
||||
95 63 42 51 13
|
||||
75 83 32 30 66
|
||||
97 6 80 82 17
|
||||
|
||||
3 88 31 43 68
|
||||
20 78 47 10 91
|
||||
14 42 40 74 39
|
||||
5 32 16 97 1
|
||||
9 33 49 70 36
|
||||
|
||||
77 31 65 27 52
|
||||
49 74 57 25 66
|
||||
24 4 39 33 1
|
||||
23 14 19 2 21
|
||||
80 71 29 81 91
|
||||
|
||||
32 68 47 3 88
|
||||
1 97 99 28 80
|
||||
2 25 18 31 51
|
||||
26 10 73 34 40
|
||||
8 55 45 36 37
|
||||
|
||||
79 81 33 94 51
|
||||
84 4 91 0 69
|
||||
49 80 35 67 20
|
||||
98 48 64 38 30
|
||||
25 83 45 97 42
|
||||
|
||||
18 5 84 94 50
|
||||
36 47 2 52 65
|
||||
39 77 83 37 80
|
||||
51 88 15 12 31
|
||||
87 17 68 48 67
|
||||
|
||||
39 95 30 8 86
|
||||
45 57 40 51 60
|
||||
85 88 33 93 25
|
||||
76 52 37 68 6
|
||||
11 80 69 19 71
|
||||
|
||||
6 71 25 66 54
|
||||
33 17 98 63 20
|
||||
27 14 44 43 18
|
||||
68 10 50 35 65
|
||||
61 3 83 12 13
|
||||
|
||||
46 21 43 15 19
|
||||
99 82 8 95 80
|
||||
1 10 45 58 53
|
||||
23 94 50 66 52
|
||||
57 98 26 77 90
|
||||
|
||||
11 50 55 28 79
|
||||
4 3 26 57 56
|
||||
68 86 10 87 69
|
||||
32 35 89 63 29
|
||||
66 27 33 8 30
|
||||
|
||||
23 34 94 93 47
|
||||
7 71 9 52 50
|
||||
45 79 13 43 86
|
||||
0 51 17 6 26
|
||||
4 82 44 38 37
|
||||
|
||||
49 24 16 64 32
|
||||
46 84 3 29 51
|
||||
71 82 33 61 26
|
||||
15 5 94 86 41
|
||||
63 36 10 67 43
|
||||
|
||||
94 17 3 71 91
|
||||
93 50 88 36 27
|
||||
54 68 7 8 34
|
||||
9 92 37 45 52
|
||||
47 29 70 10 69
|
||||
|
||||
79 27 30 0 12
|
||||
51 70 19 89 20
|
||||
2 42 64 21 49
|
||||
48 39 1 3 56
|
||||
98 35 95 82 72
|
||||
|
||||
91 71 65 95 44
|
||||
26 72 92 59 43
|
||||
61 93 6 4 90
|
||||
76 31 8 1 29
|
||||
82 64 89 22 45
|
||||
|
||||
55 4 1 42 87
|
||||
88 34 67 83 45
|
||||
22 23 98 24 12
|
||||
74 72 49 32 25
|
||||
73 7 19 26 3
|
||||
|
||||
0 43 50 57 80
|
||||
68 21 87 1 91
|
||||
60 6 81 78 99
|
||||
35 98 72 49 16
|
||||
36 25 13 48 22
|
||||
|
||||
59 1 26 3 71
|
||||
43 55 50 7 16
|
||||
5 64 29 38 84
|
||||
41 23 60 19 24
|
||||
85 58 49 98 33
|
||||
|
||||
80 48 3 65 38
|
||||
30 97 96 45 7
|
||||
6 85 8 90 40
|
||||
37 78 84 16 24
|
||||
69 11 43 64 63
|
||||
|
||||
28 14 19 1 97
|
||||
37 39 86 23 64
|
||||
20 67 85 65 90
|
||||
54 51 59 91 43
|
||||
17 30 11 24 7
|
||||
|
||||
22 88 27 43 10
|
||||
35 3 72 52 57
|
||||
61 54 28 69 37
|
||||
71 78 96 82 81
|
||||
33 39 32 40 7
|
||||
|
||||
50 60 69 33 57
|
||||
84 22 95 74 6
|
||||
90 94 71 45 68
|
||||
72 86 77 9 24
|
||||
73 12 89 13 1
|
||||
|
||||
66 35 36 87 73
|
||||
77 96 52 47 68
|
||||
63 4 83 20 95
|
||||
17 70 9 18 50
|
||||
98 40 25 60 26
|
||||
|
||||
31 37 81 34 56
|
||||
3 15 43 51 35
|
||||
67 70 1 20 12
|
||||
80 54 69 17 88
|
||||
65 91 60 8 53
|
||||
|
||||
76 23 87 41 18
|
||||
49 58 92 98 25
|
||||
77 53 44 17 27
|
||||
67 28 37 66 95
|
||||
59 39 33 4 34
|
||||
|
||||
0 25 2 5 22
|
||||
26 85 90 51 21
|
||||
31 79 10 41 45
|
||||
69 56 1 67 40
|
||||
59 98 99 89 6
|
||||
|
||||
95 67 72 52 78
|
||||
88 61 96 11 43
|
||||
34 73 53 54 8
|
||||
71 3 70 42 58
|
||||
12 82 97 68 98
|
||||
|
||||
20 10 13 74 89
|
||||
82 25 45 92 61
|
||||
58 62 0 22 57
|
||||
68 90 36 18 75
|
||||
48 39 69 4 52
|
||||
|
||||
40 3 86 33 98
|
||||
30 67 39 7 69
|
||||
80 64 77 54 51
|
||||
24 49 6 68 61
|
||||
62 94 1 26 50
|
||||
|
||||
89 88 7 21 87
|
||||
83 10 78 27 97
|
||||
35 62 86 13 38
|
||||
28 80 19 36 75
|
||||
98 93 47 33 57
|
||||
|
||||
22 88 35 79 85
|
||||
98 96 89 69 17
|
||||
37 62 57 39 1
|
||||
99 10 55 50 71
|
||||
65 94 67 4 63
|
||||
|
||||
7 83 51 95 98
|
||||
56 93 62 85 9
|
||||
72 14 44 70 67
|
||||
42 4 65 37 54
|
||||
47 82 1 60 55
|
||||
|
||||
0 73 60 25 64
|
||||
90 11 93 85 89
|
||||
80 97 86 76 96
|
||||
43 92 88 72 44
|
||||
62 87 81 34 49
|
||||
|
||||
47 27 89 98 68
|
||||
86 76 14 96 17
|
||||
21 4 41 74 29
|
||||
18 82 33 34 20
|
||||
30 62 95 42 51
|
||||
|
||||
45 4 70 20 53
|
||||
66 39 43 82 1
|
||||
54 30 68 77 42
|
||||
61 41 65 94 35
|
||||
25 78 22 26 46
|
||||
|
||||
70 73 44 48 61
|
||||
69 7 85 47 89
|
||||
91 22 12 98 11
|
||||
25 60 58 46 54
|
||||
5 37 83 62 65
|
||||
|
||||
47 62 30 70 40
|
||||
86 9 64 61 0
|
||||
27 63 90 88 17
|
||||
18 71 42 33 93
|
||||
91 14 81 4 31
|
||||
|
||||
81 7 22 94 55
|
||||
99 90 60 9 46
|
||||
65 2 47 1 73
|
||||
78 76 75 19 88
|
||||
63 51 86 56 49
|
||||
|
||||
25 27 12 22 30
|
||||
87 75 16 4 32
|
||||
19 73 5 20 52
|
||||
18 6 34 94 31
|
||||
23 96 84 26 66
|
||||
|
||||
23 69 51 35 5
|
||||
13 76 99 89 82
|
||||
88 3 50 54 33
|
||||
19 59 92 84 34
|
||||
64 80 42 40 60
|
||||
|
||||
15 91 92 60 36
|
||||
46 40 53 34 27
|
||||
13 35 96 16 42
|
||||
4 61 81 56 24
|
||||
85 21 7 99 20
|
||||
|
||||
32 37 19 21 28
|
||||
66 7 96 46 88
|
||||
23 52 25 50 22
|
||||
53 62 34 81 27
|
||||
98 31 14 40 49
|
||||
|
||||
23 43 71 61 12
|
||||
8 94 91 74 7
|
||||
67 2 59 77 4
|
||||
39 18 97 41 21
|
||||
55 15 31 9 38
|
||||
|
||||
29 69 52 16 75
|
||||
71 15 34 79 86
|
||||
62 57 48 44 54
|
||||
11 32 96 13 60
|
||||
56 77 26 68 82
|
||||
|
||||
93 57 21 94 31
|
||||
29 4 59 24 40
|
||||
13 99 34 96 91
|
||||
70 55 47 62 51
|
||||
33 32 19 69 71
|
||||
|
||||
76 80 1 57 20
|
||||
13 28 72 27 79
|
||||
40 21 71 37 85
|
||||
26 12 67 33 99
|
||||
11 41 62 18 64
|
||||
|
||||
23 22 92 69 86
|
||||
38 79 47 56 83
|
||||
74 46 1 95 24
|
||||
93 71 28 54 52
|
||||
94 51 33 57 73
|
||||
|
||||
17 96 4 81 76
|
||||
67 20 24 21 70
|
||||
28 77 3 74 10
|
||||
45 78 18 7 15
|
||||
8 48 27 58 13
|
||||
|
||||
51 58 59 73 35
|
||||
13 7 92 15 98
|
||||
75 26 1 49 24
|
||||
91 85 44 34 74
|
||||
64 2 20 72 90
|
||||
|
||||
46 89 50 54 79
|
||||
9 60 98 36 78
|
||||
91 16 80 92 20
|
||||
77 69 13 76 75
|
||||
95 41 45 3 40
|
||||
|
||||
86 7 67 20 99
|
||||
14 18 97 70 0
|
||||
81 27 89 30 3
|
||||
39 37 56 42 32
|
||||
35 71 49 8 73
|
||||
|
||||
60 67 61 6 86
|
||||
25 41 24 29 88
|
||||
98 3 90 56 87
|
||||
45 22 84 70 99
|
||||
53 59 27 26 57
|
||||
|
||||
17 4 11 41 66
|
||||
28 39 27 54 89
|
||||
3 78 37 93 29
|
||||
95 23 86 51 40
|
||||
75 67 71 57 92
|
||||
|
||||
60 41 91 89 52
|
||||
68 46 83 62 1
|
||||
18 21 72 19 35
|
||||
55 34 11 16 75
|
||||
32 71 61 78 50
|
||||
|
||||
27 38 70 48 93
|
||||
16 2 80 17 63
|
||||
97 89 55 86 85
|
||||
54 5 41 33 60
|
||||
51 95 12 67 37
|
||||
|
||||
72 17 74 6 41
|
||||
53 19 8 12 92
|
||||
39 84 82 63 48
|
||||
22 21 87 13 32
|
||||
40 34 64 15 31
|
||||
|
||||
75 2 46 64 99
|
||||
26 72 79 90 76
|
||||
85 68 10 28 67
|
||||
20 34 81 12 83
|
||||
92 1 65 43 71
|
||||
|
||||
49 80 85 54 9
|
||||
31 40 22 94 51
|
||||
12 73 43 68 98
|
||||
78 91 70 3 28
|
||||
47 59 69 99 62
|
||||
|
||||
46 56 28 73 20
|
||||
5 29 69 68 22
|
||||
64 12 8 52 92
|
||||
36 44 90 72 0
|
||||
76 48 33 86 66
|
||||
|
||||
99 61 97 17 74
|
||||
32 52 44 42 9
|
||||
57 67 36 41 31
|
||||
68 1 50 22 11
|
||||
73 12 21 48 62
|
||||
|
||||
44 53 77 88 87
|
||||
27 99 59 98 74
|
||||
33 66 51 14 34
|
||||
29 30 60 49 80
|
||||
47 84 36 12 71
|
||||
|
||||
29 89 54 59 70
|
||||
87 65 77 38 25
|
||||
40 17 41 9 30
|
||||
45 27 0 5 24
|
||||
52 8 35 68 10
|
||||
|
||||
16 41 66 87 76
|
||||
94 70 51 48 96
|
||||
90 73 98 89 91
|
||||
4 46 30 28 63
|
||||
68 45 37 80 57
|
||||
|
||||
19 11 46 41 14
|
||||
94 48 66 86 9
|
||||
42 90 56 70 21
|
||||
95 54 74 30 87
|
||||
81 89 49 60 34
|
||||
|
||||
18 90 79 64 98
|
||||
27 74 59 53 11
|
||||
96 45 17 14 23
|
||||
9 60 30 42 12
|
||||
97 21 31 5 41
|
||||
|
||||
98 63 51 92 64
|
||||
55 30 46 22 91
|
||||
8 73 61 57 67
|
||||
37 60 49 31 10
|
||||
80 99 77 11 82
|
||||
|
||||
52 69 77 41 8
|
||||
94 11 78 62 28
|
||||
91 39 96 79 3
|
||||
44 88 37 0 47
|
||||
6 80 49 98 48
|
||||
|
||||
93 2 70 26 4
|
||||
47 8 94 12 3
|
||||
10 7 24 40 23
|
||||
49 84 50 56 44
|
||||
41 53 96 1 85
|
||||
|
||||
76 78 70 24 75
|
||||
71 19 85 77 25
|
||||
21 44 58 45 64
|
||||
40 38 9 50 61
|
||||
79 42 86 37 6
|
||||
|
||||
34 39 94 84 0
|
||||
90 80 78 54 49
|
||||
13 81 87 60 56
|
||||
74 59 75 41 28
|
||||
29 67 66 44 20
|
||||
|
||||
50 66 43 39 16
|
||||
88 94 60 70 64
|
||||
63 80 56 69 36
|
||||
53 48 32 22 79
|
||||
59 77 20 30 67
|
||||
|
||||
70 56 80 12 11
|
||||
35 55 40 71 87
|
||||
84 27 96 46 85
|
||||
20 23 26 29 14
|
||||
58 37 21 75 68
|
||||
|
||||
78 23 13 37 94
|
||||
65 44 54 43 38
|
||||
29 60 83 1 57
|
||||
98 2 75 12 14
|
||||
92 25 48 9 52
|
||||
|
||||
64 37 93 48 34
|
||||
22 81 58 5 13
|
||||
63 80 2 67 53
|
||||
62 52 79 41 44
|
||||
83 75 96 91 88
|
||||
|
||||
1 54 88 45 90
|
||||
81 78 19 8 40
|
||||
17 74 69 87 33
|
||||
9 64 85 50 71
|
||||
92 38 65 82 41
|
||||
|
||||
2 62 96 60 81
|
||||
51 1 34 48 25
|
||||
78 13 74 65 42
|
||||
46 64 57 19 72
|
||||
85 88 53 68 76
|
||||
|
||||
57 95 40 92 27
|
||||
65 37 42 90 9
|
||||
17 72 78 43 45
|
||||
87 28 48 81 79
|
||||
7 4 24 67 70
|
Loading…
Reference in a new issue