add day 4 solution
This commit is contained in:
parent
6ee578fd9b
commit
2a49721dab
|
@ -0,0 +1,601 @@
|
||||||
|
69,88,67,56,53,97,46,29,37,51,3,93,92,78,41,22,45,66,13,82,2,7,52,40,18,70,32,95,89,64,84,68,83,26,43,0,61,36,57,34,80,39,6,63,72,98,21,54,23,28,65,16,76,11,20,33,96,4,10,25,30,19,90,24,55,91,15,8,71,99,58,14,60,48,44,17,47,85,74,87,86,27,42,38,81,79,94,73,12,5,77,35,9,62,50,31,49,59,75,1
|
||||||
|
|
||||||
|
78 27 82 68 20
|
||||||
|
14 2 34 51 7
|
||||||
|
58 57 99 37 81
|
||||||
|
9 4 0 76 45
|
||||||
|
67 69 70 17 23
|
||||||
|
|
||||||
|
38 60 62 34 41
|
||||||
|
39 58 91 45 10
|
||||||
|
66 74 94 50 17
|
||||||
|
68 27 75 97 49
|
||||||
|
36 64 5 98 15
|
||||||
|
|
||||||
|
17 50 13 53 20
|
||||||
|
68 57 76 10 86
|
||||||
|
2 91 67 27 11
|
||||||
|
94 70 84 69 25
|
||||||
|
32 90 45 75 41
|
||||||
|
|
||||||
|
71 84 42 49 81
|
||||||
|
26 40 24 73 18
|
||||||
|
41 37 19 25 75
|
||||||
|
76 63 48 56 55
|
||||||
|
85 51 29 88 23
|
||||||
|
|
||||||
|
27 10 11 75 59
|
||||||
|
61 96 44 58 64
|
||||||
|
24 68 90 60 87
|
||||||
|
28 55 34 80 9
|
||||||
|
41 98 91 78 62
|
||||||
|
|
||||||
|
91 95 70 64 30
|
||||||
|
34 43 32 16 57
|
||||||
|
49 80 87 51 62
|
||||||
|
61 10 8 75 21
|
||||||
|
85 66 2 55 56
|
||||||
|
|
||||||
|
50 4 11 58 48
|
||||||
|
30 10 57 16 95
|
||||||
|
93 96 68 92 81
|
||||||
|
94 17 69 86 79
|
||||||
|
52 34 99 6 19
|
||||||
|
|
||||||
|
2 16 50 26 84
|
||||||
|
97 24 32 51 8
|
||||||
|
70 0 3 52 9
|
||||||
|
1 59 43 64 80
|
||||||
|
22 23 17 92 88
|
||||||
|
|
||||||
|
84 7 37 71 81
|
||||||
|
80 97 17 94 9
|
||||||
|
27 95 39 25 5
|
||||||
|
98 46 58 77 2
|
||||||
|
60 1 73 23 18
|
||||||
|
|
||||||
|
1 14 67 20 48
|
||||||
|
75 51 36 87 73
|
||||||
|
57 84 74 47 19
|
||||||
|
89 8 13 50 24
|
||||||
|
61 12 65 46 83
|
||||||
|
|
||||||
|
82 87 8 9 85
|
||||||
|
16 22 98 91 55
|
||||||
|
26 69 42 11 93
|
||||||
|
65 15 2 63 43
|
||||||
|
71 37 28 88 12
|
||||||
|
|
||||||
|
59 7 51 1 43
|
||||||
|
17 45 15 96 93
|
||||||
|
49 88 79 84 92
|
||||||
|
40 36 25 18 22
|
||||||
|
70 57 34 62 6
|
||||||
|
|
||||||
|
1 18 5 47 46
|
||||||
|
12 27 24 40 2
|
||||||
|
53 54 20 14 42
|
||||||
|
15 51 26 58 9
|
||||||
|
31 92 34 74 7
|
||||||
|
|
||||||
|
41 84 14 32 8
|
||||||
|
38 1 60 22 88
|
||||||
|
64 70 10 91 97
|
||||||
|
94 90 65 54 50
|
||||||
|
7 58 18 87 33
|
||||||
|
|
||||||
|
93 25 26 71 42
|
||||||
|
86 85 61 32 51
|
||||||
|
20 88 67 35 29
|
||||||
|
46 28 92 9 16
|
||||||
|
34 30 97 91 44
|
||||||
|
|
||||||
|
34 88 90 99 83
|
||||||
|
22 24 4 25 18
|
||||||
|
51 41 29 53 72
|
||||||
|
75 42 66 98 79
|
||||||
|
74 7 0 73 33
|
||||||
|
|
||||||
|
99 24 44 83 47
|
||||||
|
2 21 94 35 4
|
||||||
|
96 87 31 1 22
|
||||||
|
67 3 37 43 46
|
||||||
|
85 55 10 6 80
|
||||||
|
|
||||||
|
4 75 29 54 15
|
||||||
|
66 17 89 98 27
|
||||||
|
46 5 64 3 22
|
||||||
|
97 50 0 51 52
|
||||||
|
26 39 30 32 48
|
||||||
|
|
||||||
|
39 17 46 48 63
|
||||||
|
52 13 98 40 91
|
||||||
|
14 80 28 23 60
|
||||||
|
90 88 15 89 74
|
||||||
|
56 7 2 41 58
|
||||||
|
|
||||||
|
82 51 6 7 22
|
||||||
|
87 9 60 63 95
|
||||||
|
80 0 5 8 77
|
||||||
|
85 3 68 84 39
|
||||||
|
15 45 31 55 26
|
||||||
|
|
||||||
|
48 82 38 29 55
|
||||||
|
87 46 79 61 51
|
||||||
|
1 97 69 91 83
|
||||||
|
35 89 45 59 39
|
||||||
|
43 28 21 44 24
|
||||||
|
|
||||||
|
71 97 34 43 23
|
||||||
|
44 65 92 90 31
|
||||||
|
74 87 54 79 93
|
||||||
|
55 88 66 12 53
|
||||||
|
14 56 17 52 83
|
||||||
|
|
||||||
|
91 33 20 59 67
|
||||||
|
71 78 15 94 68
|
||||||
|
8 90 72 57 36
|
||||||
|
27 40 92 1 44
|
||||||
|
18 80 7 32 19
|
||||||
|
|
||||||
|
67 20 94 89 10
|
||||||
|
85 78 70 35 0
|
||||||
|
87 66 75 73 23
|
||||||
|
36 8 17 83 21
|
||||||
|
40 52 93 62 96
|
||||||
|
|
||||||
|
8 37 66 26 63
|
||||||
|
7 90 21 18 33
|
||||||
|
31 56 81 77 55
|
||||||
|
34 15 19 27 57
|
||||||
|
13 85 0 59 4
|
||||||
|
|
||||||
|
67 77 48 26 6
|
||||||
|
31 72 89 76 45
|
||||||
|
66 4 7 43 78
|
||||||
|
15 53 81 85 70
|
||||||
|
0 10 40 30 94
|
||||||
|
|
||||||
|
79 37 8 29 27
|
||||||
|
41 14 12 99 28
|
||||||
|
75 40 30 25 77
|
||||||
|
36 78 39 32 11
|
||||||
|
91 58 17 96 51
|
||||||
|
|
||||||
|
36 8 35 30 51
|
||||||
|
28 61 4 95 67
|
||||||
|
29 69 32 80 48
|
||||||
|
55 63 98 10 22
|
||||||
|
27 87 83 62 21
|
||||||
|
|
||||||
|
24 36 52 72 16
|
||||||
|
53 1 4 96 37
|
||||||
|
31 7 69 47 57
|
||||||
|
38 97 3 26 59
|
||||||
|
74 14 29 32 40
|
||||||
|
|
||||||
|
8 73 68 62 38
|
||||||
|
43 92 15 69 46
|
||||||
|
56 58 48 28 44
|
||||||
|
25 64 13 50 97
|
||||||
|
66 34 21 49 10
|
||||||
|
|
||||||
|
63 41 71 22 18
|
||||||
|
56 82 95 60 35
|
||||||
|
53 48 79 30 86
|
||||||
|
17 51 57 70 27
|
||||||
|
75 66 42 32 43
|
||||||
|
|
||||||
|
60 59 40 42 90
|
||||||
|
65 22 43 0 49
|
||||||
|
82 96 29 52 73
|
||||||
|
67 17 20 53 24
|
||||||
|
72 5 91 50 85
|
||||||
|
|
||||||
|
94 47 2 93 74
|
||||||
|
90 10 27 17 5
|
||||||
|
92 26 28 77 88
|
||||||
|
69 43 33 19 53
|
||||||
|
34 50 54 36 60
|
||||||
|
|
||||||
|
73 36 90 50 37
|
||||||
|
11 80 81 93 74
|
||||||
|
78 56 86 6 39
|
||||||
|
15 94 7 91 42
|
||||||
|
33 8 64 40 28
|
||||||
|
|
||||||
|
73 37 57 65 0
|
||||||
|
64 26 52 79 69
|
||||||
|
15 41 3 2 1
|
||||||
|
71 48 8 43 31
|
||||||
|
5 93 86 42 27
|
||||||
|
|
||||||
|
59 35 19 17 83
|
||||||
|
15 93 53 2 4
|
||||||
|
26 51 85 71 22
|
||||||
|
31 52 74 12 57
|
||||||
|
70 40 68 39 24
|
||||||
|
|
||||||
|
3 6 45 81 20
|
||||||
|
82 30 15 62 80
|
||||||
|
21 70 56 23 32
|
||||||
|
68 19 50 16 14
|
||||||
|
46 89 72 59 40
|
||||||
|
|
||||||
|
17 27 72 36 12
|
||||||
|
55 30 6 88 69
|
||||||
|
34 91 87 45 82
|
||||||
|
48 15 18 21 7
|
||||||
|
44 4 81 14 93
|
||||||
|
|
||||||
|
55 84 58 24 53
|
||||||
|
99 44 88 54 37
|
||||||
|
2 56 57 50 35
|
||||||
|
13 90 26 30 96
|
||||||
|
7 97 12 19 71
|
||||||
|
|
||||||
|
31 26 87 54 76
|
||||||
|
68 24 20 27 98
|
||||||
|
53 75 15 95 8
|
||||||
|
63 2 45 50 9
|
||||||
|
49 17 88 55 1
|
||||||
|
|
||||||
|
91 78 45 26 30
|
||||||
|
63 95 67 60 58
|
||||||
|
34 39 44 20 11
|
||||||
|
38 29 73 22 80
|
||||||
|
56 12 77 37 4
|
||||||
|
|
||||||
|
24 18 65 21 6
|
||||||
|
76 45 85 2 78
|
||||||
|
67 69 55 91 57
|
||||||
|
96 61 39 36 83
|
||||||
|
8 54 12 38 70
|
||||||
|
|
||||||
|
33 71 24 82 84
|
||||||
|
53 32 45 9 34
|
||||||
|
89 28 30 42 96
|
||||||
|
49 95 69 51 12
|
||||||
|
80 41 31 48 75
|
||||||
|
|
||||||
|
40 60 0 92 13
|
||||||
|
87 9 45 98 77
|
||||||
|
14 91 35 1 95
|
||||||
|
79 39 19 89 51
|
||||||
|
61 56 8 97 32
|
||||||
|
|
||||||
|
89 70 2 81 34
|
||||||
|
21 59 39 84 64
|
||||||
|
28 94 97 29 30
|
||||||
|
35 27 99 32 55
|
||||||
|
23 47 14 88 0
|
||||||
|
|
||||||
|
46 14 92 49 94
|
||||||
|
90 80 2 65 30
|
||||||
|
54 32 35 56 27
|
||||||
|
29 55 97 39 37
|
||||||
|
81 72 47 66 42
|
||||||
|
|
||||||
|
53 1 0 34 82
|
||||||
|
26 28 30 65 41
|
||||||
|
17 4 57 49 40
|
||||||
|
84 46 27 35 91
|
||||||
|
56 38 20 81 86
|
||||||
|
|
||||||
|
10 31 98 66 22
|
||||||
|
87 99 24 34 93
|
||||||
|
7 95 28 78 73
|
||||||
|
61 25 14 5 1
|
||||||
|
42 85 16 47 43
|
||||||
|
|
||||||
|
92 43 9 68 40
|
||||||
|
41 65 18 69 89
|
||||||
|
35 88 62 67 75
|
||||||
|
64 4 17 42 93
|
||||||
|
78 33 94 87 81
|
||||||
|
|
||||||
|
18 61 10 19 87
|
||||||
|
46 99 55 3 28
|
||||||
|
16 41 45 39 27
|
||||||
|
8 13 43 64 52
|
||||||
|
23 34 47 11 92
|
||||||
|
|
||||||
|
21 59 74 36 38
|
||||||
|
81 29 79 80 44
|
||||||
|
84 30 37 62 57
|
||||||
|
69 82 60 10 52
|
||||||
|
7 55 93 12 0
|
||||||
|
|
||||||
|
37 23 52 2 94
|
||||||
|
19 96 8 68 29
|
||||||
|
99 57 53 9 48
|
||||||
|
62 11 35 95 98
|
||||||
|
93 72 58 16 36
|
||||||
|
|
||||||
|
80 53 82 29 76
|
||||||
|
77 17 85 62 81
|
||||||
|
34 92 25 55 20
|
||||||
|
91 39 23 50 31
|
||||||
|
64 37 79 96 2
|
||||||
|
|
||||||
|
40 5 57 36 14
|
||||||
|
91 53 56 73 27
|
||||||
|
11 55 74 7 9
|
||||||
|
90 58 12 22 26
|
||||||
|
82 38 59 97 85
|
||||||
|
|
||||||
|
54 79 75 0 30
|
||||||
|
7 15 26 84 40
|
||||||
|
91 76 42 3 19
|
||||||
|
65 77 53 21 67
|
||||||
|
45 50 2 14 46
|
||||||
|
|
||||||
|
23 51 40 13 72
|
||||||
|
54 61 59 18 14
|
||||||
|
0 41 5 24 82
|
||||||
|
73 11 46 36 17
|
||||||
|
16 28 25 60 4
|
||||||
|
|
||||||
|
85 42 22 54 18
|
||||||
|
3 27 12 15 99
|
||||||
|
13 26 89 93 76
|
||||||
|
23 87 77 64 25
|
||||||
|
9 17 74 57 81
|
||||||
|
|
||||||
|
47 64 85 69 89
|
||||||
|
59 17 4 83 88
|
||||||
|
80 70 53 7 67
|
||||||
|
73 18 81 44 30
|
||||||
|
45 37 90 57 3
|
||||||
|
|
||||||
|
72 48 35 39 31
|
||||||
|
44 85 91 52 46
|
||||||
|
73 61 68 66 12
|
||||||
|
74 95 76 75 36
|
||||||
|
83 21 15 2 10
|
||||||
|
|
||||||
|
63 82 95 31 51
|
||||||
|
93 3 53 15 70
|
||||||
|
0 36 44 19 5
|
||||||
|
11 17 62 55 83
|
||||||
|
80 91 4 18 66
|
||||||
|
|
||||||
|
44 8 45 90 64
|
||||||
|
30 33 9 27 47
|
||||||
|
68 53 81 77 35
|
||||||
|
63 4 82 80 67
|
||||||
|
3 28 66 22 43
|
||||||
|
|
||||||
|
48 86 57 16 7
|
||||||
|
69 51 11 8 61
|
||||||
|
25 12 43 88 71
|
||||||
|
83 36 31 77 5
|
||||||
|
50 21 9 76 63
|
||||||
|
|
||||||
|
27 39 6 87 49
|
||||||
|
16 66 3 25 10
|
||||||
|
7 70 8 94 42
|
||||||
|
95 20 55 9 29
|
||||||
|
0 46 36 79 18
|
||||||
|
|
||||||
|
27 21 36 14 79
|
||||||
|
23 48 56 74 94
|
||||||
|
18 99 73 93 32
|
||||||
|
98 77 37 35 69
|
||||||
|
43 34 63 59 9
|
||||||
|
|
||||||
|
27 96 78 94 20
|
||||||
|
34 5 49 84 99
|
||||||
|
68 74 21 57 1
|
||||||
|
93 85 29 47 65
|
||||||
|
54 97 42 70 40
|
||||||
|
|
||||||
|
29 28 64 26 46
|
||||||
|
39 48 13 51 2
|
||||||
|
42 91 96 93 66
|
||||||
|
12 60 70 8 24
|
||||||
|
18 21 83 56 45
|
||||||
|
|
||||||
|
64 43 76 40 97
|
||||||
|
30 10 22 84 53
|
||||||
|
51 13 68 93 15
|
||||||
|
75 27 18 39 82
|
||||||
|
62 61 91 12 88
|
||||||
|
|
||||||
|
72 6 61 10 45
|
||||||
|
65 62 57 2 91
|
||||||
|
30 24 76 42 69
|
||||||
|
32 36 43 63 75
|
||||||
|
92 44 58 82 49
|
||||||
|
|
||||||
|
30 39 58 75 76
|
||||||
|
62 53 59 70 97
|
||||||
|
29 31 54 27 89
|
||||||
|
90 32 37 86 1
|
||||||
|
7 34 42 61 91
|
||||||
|
|
||||||
|
98 94 10 72 26
|
||||||
|
96 78 69 77 44
|
||||||
|
45 5 88 42 73
|
||||||
|
74 91 25 22 99
|
||||||
|
16 79 60 71 37
|
||||||
|
|
||||||
|
44 33 34 27 87
|
||||||
|
46 89 75 37 4
|
||||||
|
71 63 16 35 17
|
||||||
|
83 99 28 51 97
|
||||||
|
66 86 14 61 9
|
||||||
|
|
||||||
|
2 54 7 32 79
|
||||||
|
33 36 37 35 81
|
||||||
|
25 50 84 59 21
|
||||||
|
18 16 48 26 15
|
||||||
|
94 73 61 67 44
|
||||||
|
|
||||||
|
18 34 66 57 31
|
||||||
|
74 92 71 59 19
|
||||||
|
36 94 16 80 24
|
||||||
|
35 54 58 87 64
|
||||||
|
73 90 41 49 88
|
||||||
|
|
||||||
|
74 5 57 40 21
|
||||||
|
61 11 50 80 66
|
||||||
|
35 58 52 10 56
|
||||||
|
92 67 82 46 72
|
||||||
|
32 18 33 34 55
|
||||||
|
|
||||||
|
66 79 27 24 46
|
||||||
|
98 4 30 80 49
|
||||||
|
19 23 68 18 90
|
||||||
|
41 91 83 63 77
|
||||||
|
84 12 8 10 21
|
||||||
|
|
||||||
|
23 47 58 5 20
|
||||||
|
30 32 61 6 28
|
||||||
|
24 11 8 33 10
|
||||||
|
52 93 95 0 45
|
||||||
|
22 27 3 82 40
|
||||||
|
|
||||||
|
11 51 47 83 38
|
||||||
|
28 85 9 10 48
|
||||||
|
80 60 46 55 32
|
||||||
|
89 14 90 71 50
|
||||||
|
0 65 24 40 19
|
||||||
|
|
||||||
|
12 2 37 62 93
|
||||||
|
78 69 53 43 33
|
||||||
|
85 76 26 21 92
|
||||||
|
36 54 89 46 91
|
||||||
|
29 18 72 9 51
|
||||||
|
|
||||||
|
82 36 47 95 30
|
||||||
|
65 2 98 92 12
|
||||||
|
93 73 44 48 6
|
||||||
|
31 74 62 27 42
|
||||||
|
32 13 11 99 50
|
||||||
|
|
||||||
|
89 31 94 1 78
|
||||||
|
77 24 46 64 26
|
||||||
|
11 16 28 30 45
|
||||||
|
80 22 5 8 52
|
||||||
|
32 38 76 65 90
|
||||||
|
|
||||||
|
92 96 35 86 51
|
||||||
|
47 75 17 87 30
|
||||||
|
43 29 55 50 11
|
||||||
|
77 99 48 24 20
|
||||||
|
37 7 91 23 8
|
||||||
|
|
||||||
|
26 12 82 95 78
|
||||||
|
41 65 80 53 44
|
||||||
|
75 43 32 46 84
|
||||||
|
63 99 69 45 88
|
||||||
|
56 48 87 38 49
|
||||||
|
|
||||||
|
8 87 21 27 15
|
||||||
|
84 44 26 61 82
|
||||||
|
10 66 29 95 65
|
||||||
|
4 86 38 91 28
|
||||||
|
14 49 22 52 54
|
||||||
|
|
||||||
|
27 43 13 35 33
|
||||||
|
20 66 77 70 31
|
||||||
|
5 17 94 98 83
|
||||||
|
11 22 39 55 75
|
||||||
|
53 61 46 38 89
|
||||||
|
|
||||||
|
84 49 52 32 51
|
||||||
|
90 46 97 91 54
|
||||||
|
2 42 65 10 25
|
||||||
|
80 77 31 81 16
|
||||||
|
58 17 15 26 55
|
||||||
|
|
||||||
|
19 83 57 21 95
|
||||||
|
4 29 11 64 0
|
||||||
|
17 63 13 27 58
|
||||||
|
14 96 43 22 56
|
||||||
|
97 84 81 67 94
|
||||||
|
|
||||||
|
47 49 4 70 65
|
||||||
|
60 88 9 77 3
|
||||||
|
63 72 33 50 97
|
||||||
|
68 84 98 78 89
|
||||||
|
10 79 25 24 54
|
||||||
|
|
||||||
|
81 70 39 73 11
|
||||||
|
86 30 38 14 91
|
||||||
|
9 18 72 21 24
|
||||||
|
54 83 80 78 66
|
||||||
|
23 93 36 31 53
|
||||||
|
|
||||||
|
34 58 18 69 28
|
||||||
|
57 70 54 50 64
|
||||||
|
35 36 4 56 72
|
||||||
|
32 16 45 33 17
|
||||||
|
83 60 39 22 47
|
||||||
|
|
||||||
|
31 73 56 21 63
|
||||||
|
66 14 42 45 80
|
||||||
|
60 57 47 36 78
|
||||||
|
93 75 44 22 11
|
||||||
|
68 89 58 88 17
|
||||||
|
|
||||||
|
74 16 65 13 45
|
||||||
|
86 20 6 34 15
|
||||||
|
70 46 59 75 57
|
||||||
|
28 62 67 71 98
|
||||||
|
77 63 25 61 64
|
||||||
|
|
||||||
|
71 20 42 65 47
|
||||||
|
29 80 53 78 99
|
||||||
|
70 57 18 45 32
|
||||||
|
86 46 35 77 26
|
||||||
|
15 91 93 55 67
|
||||||
|
|
||||||
|
27 16 31 41 42
|
||||||
|
77 34 10 90 18
|
||||||
|
28 99 44 20 68
|
||||||
|
98 82 3 75 62
|
||||||
|
88 85 47 17 71
|
||||||
|
|
||||||
|
31 95 98 60 93
|
||||||
|
80 81 23 35 70
|
||||||
|
4 57 38 69 76
|
||||||
|
18 0 41 86 54
|
||||||
|
47 26 90 65 39
|
||||||
|
|
||||||
|
79 86 59 66 50
|
||||||
|
49 64 65 95 6
|
||||||
|
90 67 36 32 46
|
||||||
|
10 20 25 27 1
|
||||||
|
87 21 17 78 13
|
||||||
|
|
||||||
|
16 8 95 35 43
|
||||||
|
14 0 72 89 68
|
||||||
|
52 11 12 67 25
|
||||||
|
63 64 13 32 15
|
||||||
|
53 98 55 81 75
|
||||||
|
|
||||||
|
51 85 15 91 10
|
||||||
|
24 68 80 22 8
|
||||||
|
55 18 36 30 66
|
||||||
|
27 21 46 63 26
|
||||||
|
81 5 14 2 13
|
||||||
|
|
||||||
|
71 39 19 40 69
|
||||||
|
58 70 65 46 78
|
||||||
|
98 14 59 94 60
|
||||||
|
12 55 68 91 0
|
||||||
|
18 35 25 61 86
|
||||||
|
|
||||||
|
85 74 56 43 44
|
||||||
|
98 78 17 95 8
|
||||||
|
70 30 66 55 94
|
||||||
|
57 62 82 49 77
|
||||||
|
61 32 97 88 58
|
||||||
|
|
||||||
|
23 1 53 65 30
|
||||||
|
45 15 9 26 28
|
||||||
|
2 21 42 27 12
|
||||||
|
84 68 71 19 13
|
||||||
|
58 57 35 77 14
|
|
@ -0,0 +1,86 @@
|
||||||
|
# Copyright 2021 Christian Ulrich
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# usage: ./part1 < input
|
||||||
|
|
||||||
|
import sequtils
|
||||||
|
import strutils
|
||||||
|
|
||||||
|
type
|
||||||
|
Cell = tuple[val: uint8, checked: bool]
|
||||||
|
Board = array[5, array[5, Cell]]
|
||||||
|
|
||||||
|
iterator lines(board: Board): array[5, Cell] =
|
||||||
|
for i in 0 .. high(Board):
|
||||||
|
yield board[i]
|
||||||
|
|
||||||
|
iterator columns(board: Board): array[5, Cell] =
|
||||||
|
for i in 0 .. high(board[0]):
|
||||||
|
var column: array[5, Cell]
|
||||||
|
for j in 0 .. high(Board):
|
||||||
|
column[j] = board[j][i]
|
||||||
|
yield column
|
||||||
|
|
||||||
|
proc check(board: var Board, val: uint8) =
|
||||||
|
for i in 0 .. high(Board):
|
||||||
|
for cellIndex, cell in board[i].pairs():
|
||||||
|
if cell.val == val:
|
||||||
|
board[i][cellIndex].checked = true
|
||||||
|
|
||||||
|
proc readDrawnNumbers(): seq[uint8] =
|
||||||
|
result = readLine(stdin).split(',').mapIt(uint8(parseUint(it)))
|
||||||
|
|
||||||
|
proc readBoards(): seq[Board] =
|
||||||
|
var
|
||||||
|
line: string
|
||||||
|
board: Board
|
||||||
|
while true:
|
||||||
|
if not readLine(stdin, line):
|
||||||
|
return
|
||||||
|
for i in 0 .. high(Board):
|
||||||
|
if not readLine(stdin, line):
|
||||||
|
return
|
||||||
|
board[i][0 .. high(Board)] = line.splitWhitespace(4)
|
||||||
|
.mapIt((uint8(parseUint(it)), false))
|
||||||
|
result.add(board)
|
||||||
|
|
||||||
|
proc bingoScore(board: Board, latestNumber: uint8): int =
|
||||||
|
var unmarkedSum = 0
|
||||||
|
for line in board.lines():
|
||||||
|
unmarkedSum.inc(line.foldl(if not b.checked: a + int(b.val) else: a, 0))
|
||||||
|
result = unmarkedSum * int(latestNumber)
|
||||||
|
|
||||||
|
proc bingo(): int =
|
||||||
|
let drawnNumbers = readDrawnNumbers()
|
||||||
|
var boards = readBoards()
|
||||||
|
for number in drawnNumbers:
|
||||||
|
for board in boards.mitems():
|
||||||
|
board.check(number)
|
||||||
|
for line in board.lines():
|
||||||
|
if line.allIt(it.checked):
|
||||||
|
return board.bingoScore(number)
|
||||||
|
for column in board.columns():
|
||||||
|
if column.allIt(it.checked):
|
||||||
|
return board.bingoScore(number)
|
||||||
|
|
||||||
|
proc main(): int =
|
||||||
|
try:
|
||||||
|
echo bingo()
|
||||||
|
except Exception as error:
|
||||||
|
echo error.msg
|
||||||
|
result = -1
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
quit(main())
|
|
@ -0,0 +1,90 @@
|
||||||
|
# Copyright 2021 Christian Ulrich
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# usage: ./part1 < input
|
||||||
|
|
||||||
|
import sequtils
|
||||||
|
import strutils
|
||||||
|
|
||||||
|
type
|
||||||
|
Cell = tuple[val: uint8, checked: bool]
|
||||||
|
Board = array[5, array[5, Cell]]
|
||||||
|
|
||||||
|
iterator lines(board: Board): array[5, Cell] =
|
||||||
|
for i in 0 .. high(Board):
|
||||||
|
yield board[i]
|
||||||
|
|
||||||
|
iterator columns(board: Board): array[5, Cell] =
|
||||||
|
for i in 0 .. high(board[0]):
|
||||||
|
var column: array[5, Cell]
|
||||||
|
for j in 0 .. high(Board):
|
||||||
|
column[j] = board[j][i]
|
||||||
|
yield column
|
||||||
|
|
||||||
|
proc check(board: var Board, val: uint8) =
|
||||||
|
for i in 0 .. high(Board):
|
||||||
|
for cellIndex, cell in board[i].pairs():
|
||||||
|
if cell.val == val:
|
||||||
|
board[i][cellIndex].checked = true
|
||||||
|
|
||||||
|
proc readDrawnNumbers(): seq[uint8] =
|
||||||
|
result = readLine(stdin).split(',').mapIt(uint8(parseUint(it)))
|
||||||
|
|
||||||
|
proc readBoards(): seq[Board] =
|
||||||
|
var
|
||||||
|
line: string
|
||||||
|
board: Board
|
||||||
|
while true:
|
||||||
|
if not readLine(stdin, line):
|
||||||
|
return
|
||||||
|
for i in 0 .. high(Board):
|
||||||
|
if not readLine(stdin, line):
|
||||||
|
return
|
||||||
|
board[i][0 .. high(Board)] = line.splitWhitespace(4)
|
||||||
|
.mapIt((uint8(parseUint(it)), false))
|
||||||
|
result.add(board)
|
||||||
|
|
||||||
|
proc bingoScore(board: Board, latestNumber: uint8): int =
|
||||||
|
var unmarkedSum = 0
|
||||||
|
for line in board.lines():
|
||||||
|
unmarkedSum.inc(line.foldl(if not b.checked: a + int(b.val) else: a, 0))
|
||||||
|
result = unmarkedSum * int(latestNumber)
|
||||||
|
|
||||||
|
proc bingo(): int =
|
||||||
|
let drawnNumbers = readDrawnNumbers()
|
||||||
|
var boards: seq[tuple[data: Board, finished: bool]] = readBoards().mapIt((it, false))
|
||||||
|
for number in drawnNumbers:
|
||||||
|
for boardIndex, board in boards.mpairs():
|
||||||
|
board.data.check(number)
|
||||||
|
for line in board.data.lines():
|
||||||
|
if line.allIt(it.checked):
|
||||||
|
board.finished = true
|
||||||
|
for column in board.data.columns():
|
||||||
|
if column.allIt(it.checked):
|
||||||
|
board.finished = true
|
||||||
|
if boards.len() == 1 and boards[0].finished:
|
||||||
|
return boards[0].data.bingoScore(number)
|
||||||
|
boards.keepItIf(not it.finished)
|
||||||
|
raise newException(ValueError, "there is no winner")
|
||||||
|
|
||||||
|
proc main(): int =
|
||||||
|
try:
|
||||||
|
echo bingo()
|
||||||
|
except Exception as error:
|
||||||
|
echo error.msg
|
||||||
|
result = -1
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
quit(main())
|
|
@ -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
|
Loading…
Reference in New Issue