04
This commit is contained in:
parent
442ad26622
commit
338bda525e
22
04/CMakeLists.txt
Normal file
22
04/CMakeLists.txt
Normal file
@ -0,0 +1,22 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
enable_language(CXX)
|
||||
|
||||
project(AoC04)
|
||||
|
||||
if(APPLE)
|
||||
include_directories(/usr/local/include)
|
||||
link_directories(/usr/local/lib)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
add_executable(${CMAKE_PROJECT_NAME} WIN32)
|
||||
else()
|
||||
add_executable(${CMAKE_PROJECT_NAME})
|
||||
endif()
|
||||
|
||||
target_sources(${CMAKE_PROJECT_NAME}
|
||||
PRIVATE main.cpp
|
||||
)
|
601
04/input
Normal file
601
04/input
Normal file
@ -0,0 +1,601 @@
|
||||
87,12,53,23,31,70,37,79,95,16,72,9,98,92,5,74,17,60,96,80,75,11,73,33,3,84,81,2,97,93,59,13,77,52,69,83,51,64,48,82,7,49,20,8,36,66,19,0,99,41,91,78,42,40,62,63,57,39,55,47,29,50,58,34,27,43,30,35,22,28,4,14,26,32,10,88,46,65,90,76,38,6,71,67,44,68,86,25,21,24,56,94,18,89,61,15,1,45,54,85
|
||||
|
||||
49 0 9 90 8
|
||||
41 88 56 13 6
|
||||
17 11 45 26 75
|
||||
29 62 27 83 36
|
||||
31 78 1 55 38
|
||||
|
||||
52 53 19 56 80
|
||||
94 33 3 78 32
|
||||
10 89 66 48 55
|
||||
99 23 88 8 39
|
||||
76 75 44 79 14
|
||||
|
||||
2 60 64 25 55
|
||||
89 1 21 65 41
|
||||
6 12 58 11 68
|
||||
23 49 44 91 14
|
||||
45 52 99 47 63
|
||||
|
||||
49 96 0 87 40
|
||||
13 22 10 84 52
|
||||
95 30 50 14 1
|
||||
58 17 98 45 38
|
||||
63 11 74 62 42
|
||||
|
||||
97 98 43 36 48
|
||||
6 83 89 41 85
|
||||
69 79 51 0 67
|
||||
62 93 30 82 45
|
||||
87 32 25 34 29
|
||||
|
||||
31 62 76 66 93
|
||||
77 11 97 51 32
|
||||
42 88 68 35 72
|
||||
29 79 70 85 47
|
||||
91 3 96 38 14
|
||||
|
||||
98 77 12 72 83
|
||||
22 78 75 88 11
|
||||
67 63 84 60 6
|
||||
29 95 73 96 53
|
||||
45 21 66 57 9
|
||||
|
||||
16 47 66 85 17
|
||||
54 87 78 21 60
|
||||
45 44 35 33 32
|
||||
88 46 27 49 18
|
||||
58 42 72 24 75
|
||||
|
||||
82 9 2 68 0
|
||||
16 72 83 31 5
|
||||
60 34 92 62 21
|
||||
13 48 69 59 81
|
||||
7 87 28 42 14
|
||||
|
||||
29 58 10 50 19
|
||||
47 4 51 22 69
|
||||
66 5 83 82 25
|
||||
71 23 64 93 14
|
||||
80 46 76 65 33
|
||||
|
||||
98 54 93 47 26
|
||||
44 23 33 40 72
|
||||
50 36 82 48 19
|
||||
29 18 16 56 55
|
||||
24 95 78 42 27
|
||||
|
||||
57 35 36 51 55
|
||||
61 85 33 73 47
|
||||
2 53 59 10 26
|
||||
17 89 96 78 20
|
||||
3 56 84 97 98
|
||||
|
||||
25 37 24 76 98
|
||||
20 48 47 40 22
|
||||
8 55 93 64 70
|
||||
5 13 30 31 46
|
||||
10 65 68 3 66
|
||||
|
||||
72 41 68 78 93
|
||||
38 51 37 67 99
|
||||
81 2 48 88 43
|
||||
12 15 57 24 22
|
||||
3 16 92 74 75
|
||||
|
||||
84 96 80 41 16
|
||||
85 77 47 95 46
|
||||
67 37 36 27 26
|
||||
87 70 66 75 86
|
||||
13 64 31 25 48
|
||||
|
||||
79 19 53 10 86
|
||||
65 78 52 17 61
|
||||
83 98 22 88 8
|
||||
14 91 7 85 2
|
||||
23 35 68 55 16
|
||||
|
||||
31 58 84 49 55
|
||||
38 14 25 23 11
|
||||
70 37 0 46 29
|
||||
8 24 59 53 68
|
||||
66 17 10 3 99
|
||||
|
||||
40 62 31 38 85
|
||||
86 75 81 37 24
|
||||
51 87 5 15 73
|
||||
58 83 46 32 60
|
||||
4 25 71 0 8
|
||||
|
||||
1 24 53 43 17
|
||||
37 27 6 19 9
|
||||
3 89 63 80 67
|
||||
11 26 62 22 7
|
||||
59 25 45 74 49
|
||||
|
||||
61 84 59 57 24
|
||||
93 83 10 9 51
|
||||
8 21 26 6 68
|
||||
71 48 5 86 16
|
||||
55 11 29 25 35
|
||||
|
||||
66 93 28 81 23
|
||||
98 77 82 52 70
|
||||
25 99 34 65 95
|
||||
45 6 56 30 80
|
||||
2 79 94 33 13
|
||||
|
||||
7 38 9 16 19
|
||||
20 34 80 3 79
|
||||
1 26 49 82 97
|
||||
14 71 64 67 59
|
||||
40 72 98 25 99
|
||||
|
||||
34 3 4 51 52
|
||||
38 15 24 71 36
|
||||
87 26 31 44 70
|
||||
95 69 66 0 17
|
||||
19 13 7 62 6
|
||||
|
||||
2 5 6 9 61
|
||||
40 55 17 13 67
|
||||
95 81 30 25 47
|
||||
45 75 88 68 48
|
||||
70 59 34 35 1
|
||||
|
||||
29 59 26 0 84
|
||||
22 74 99 42 1
|
||||
47 24 76 66 32
|
||||
83 36 16 78 82
|
||||
25 98 49 77 6
|
||||
|
||||
35 16 21 88 17
|
||||
73 26 19 83 66
|
||||
46 36 70 22 8
|
||||
32 48 72 28 68
|
||||
71 11 99 29 10
|
||||
|
||||
98 55 54 52 2
|
||||
48 58 27 43 84
|
||||
9 0 29 65 57
|
||||
5 18 62 85 91
|
||||
8 94 31 80 16
|
||||
|
||||
84 20 60 71 25
|
||||
31 46 66 75 48
|
||||
42 43 96 86 88
|
||||
14 98 47 76 87
|
||||
32 67 92 41 97
|
||||
|
||||
24 67 68 3 32
|
||||
79 17 57 61 95
|
||||
71 29 22 63 52
|
||||
19 26 48 44 86
|
||||
70 20 74 76 47
|
||||
|
||||
62 28 80 18 88
|
||||
76 53 65 81 40
|
||||
21 59 79 69 8
|
||||
60 94 14 64 92
|
||||
13 33 74 11 51
|
||||
|
||||
86 90 87 66 34
|
||||
63 74 68 32 14
|
||||
64 85 55 47 83
|
||||
40 53 57 50 17
|
||||
49 54 42 69 46
|
||||
|
||||
60 53 12 66 55
|
||||
42 16 96 98 51
|
||||
10 79 38 36 35
|
||||
72 14 86 80 2
|
||||
62 76 83 17 61
|
||||
|
||||
31 10 57 24 82
|
||||
45 32 44 60 8
|
||||
21 20 65 7 73
|
||||
17 89 63 4 66
|
||||
96 97 85 50 33
|
||||
|
||||
75 44 31 76 26
|
||||
91 94 99 32 72
|
||||
74 10 86 71 90
|
||||
11 37 81 15 95
|
||||
51 34 28 35 59
|
||||
|
||||
98 14 58 10 48
|
||||
26 38 54 34 66
|
||||
31 82 35 32 78
|
||||
96 19 94 15 2
|
||||
75 23 97 55 24
|
||||
|
||||
45 85 22 98 0
|
||||
41 55 90 39 51
|
||||
62 19 82 13 21
|
||||
24 20 8 84 16
|
||||
32 66 95 80 68
|
||||
|
||||
66 2 23 78 88
|
||||
76 15 97 62 59
|
||||
19 32 4 99 46
|
||||
30 37 80 77 91
|
||||
68 44 42 22 74
|
||||
|
||||
27 98 97 73 63
|
||||
35 31 67 64 71
|
||||
62 25 34 6 65
|
||||
84 29 77 24 10
|
||||
99 82 21 33 39
|
||||
|
||||
18 29 12 64 72
|
||||
9 85 74 36 10
|
||||
94 71 39 76 46
|
||||
90 33 79 80 2
|
||||
40 20 25 95 81
|
||||
|
||||
99 81 37 58 10
|
||||
55 6 96 93 21
|
||||
28 67 33 42 50
|
||||
73 1 65 9 61
|
||||
27 44 78 45 63
|
||||
|
||||
80 19 46 94 66
|
||||
21 99 49 59 53
|
||||
84 4 10 1 52
|
||||
37 57 85 2 32
|
||||
11 35 56 20 23
|
||||
|
||||
30 71 55 20 89
|
||||
14 25 41 49 87
|
||||
84 93 62 76 72
|
||||
58 81 88 98 66
|
||||
10 44 82 17 73
|
||||
|
||||
68 11 74 55 27
|
||||
77 94 26 69 65
|
||||
60 64 17 48 19
|
||||
45 25 61 85 70
|
||||
22 44 4 54 24
|
||||
|
||||
29 50 92 98 61
|
||||
83 78 44 90 52
|
||||
36 45 7 41 12
|
||||
23 99 3 28 64
|
||||
6 62 71 5 27
|
||||
|
||||
70 28 39 95 24
|
||||
41 51 81 43 37
|
||||
92 40 48 10 34
|
||||
36 56 67 69 58
|
||||
85 91 68 93 84
|
||||
|
||||
46 35 73 24 21
|
||||
79 42 97 34 67
|
||||
74 55 0 88 15
|
||||
33 84 17 59 5
|
||||
93 82 92 51 3
|
||||
|
||||
14 12 39 97 25
|
||||
95 32 99 35 86
|
||||
71 91 63 37 5
|
||||
70 48 18 42 16
|
||||
75 30 60 21 78
|
||||
|
||||
64 2 78 87 76
|
||||
32 82 35 57 26
|
||||
3 99 20 36 72
|
||||
25 63 13 69 39
|
||||
50 29 52 0 81
|
||||
|
||||
69 49 68 81 87
|
||||
25 97 64 19 93
|
||||
4 30 80 15 13
|
||||
95 55 29 60 10
|
||||
73 53 11 43 41
|
||||
|
||||
48 63 71 80 14
|
||||
32 82 61 88 27
|
||||
8 39 49 43 9
|
||||
20 29 73 96 67
|
||||
83 87 36 89 51
|
||||
|
||||
47 85 11 93 18
|
||||
70 36 6 35 26
|
||||
1 98 48 63 14
|
||||
2 53 12 96 8
|
||||
90 15 43 45 62
|
||||
|
||||
45 73 25 1 54
|
||||
11 20 97 66 63
|
||||
42 4 31 67 77
|
||||
23 68 91 47 37
|
||||
86 65 3 87 79
|
||||
|
||||
28 74 19 88 35
|
||||
58 82 37 65 8
|
||||
59 38 27 21 9
|
||||
50 53 39 89 48
|
||||
41 78 13 43 1
|
||||
|
||||
88 85 49 97 70
|
||||
3 87 2 69 23
|
||||
26 80 73 71 31
|
||||
6 82 74 21 86
|
||||
33 36 67 4 5
|
||||
|
||||
55 28 54 36 84
|
||||
52 13 48 37 34
|
||||
66 11 10 19 16
|
||||
32 0 93 77 23
|
||||
20 9 57 91 45
|
||||
|
||||
14 2 7 44 32
|
||||
38 72 37 73 91
|
||||
27 34 68 61 35
|
||||
95 97 6 47 92
|
||||
36 1 20 66 17
|
||||
|
||||
55 3 89 99 76
|
||||
17 22 45 62 6
|
||||
72 75 25 69 92
|
||||
83 35 15 11 21
|
||||
78 54 36 48 64
|
||||
|
||||
20 58 84 67 18
|
||||
26 89 62 47 72
|
||||
74 77 43 52 4
|
||||
45 8 38 31 96
|
||||
33 75 68 76 63
|
||||
|
||||
64 32 17 52 30
|
||||
9 70 58 38 33
|
||||
54 83 15 28 43
|
||||
63 69 39 62 48
|
||||
89 98 81 91 49
|
||||
|
||||
75 5 14 82 16
|
||||
8 77 29 65 48
|
||||
9 3 24 46 89
|
||||
94 36 27 21 80
|
||||
30 13 64 51 37
|
||||
|
||||
69 23 14 26 55
|
||||
83 5 77 41 53
|
||||
19 30 3 52 84
|
||||
98 78 90 80 92
|
||||
94 42 58 29 50
|
||||
|
||||
54 23 73 55 79
|
||||
40 80 30 99 42
|
||||
81 53 1 72 75
|
||||
34 90 84 39 37
|
||||
51 31 57 74 65
|
||||
|
||||
61 26 17 18 20
|
||||
90 98 43 47 72
|
||||
19 63 73 15 58
|
||||
4 2 7 51 9
|
||||
11 31 1 54 96
|
||||
|
||||
15 84 42 49 16
|
||||
85 62 86 12 29
|
||||
63 6 80 94 70
|
||||
45 52 65 48 37
|
||||
90 97 73 7 95
|
||||
|
||||
79 74 24 76 31
|
||||
97 94 83 14 3
|
||||
40 1 53 81 12
|
||||
90 48 27 21 25
|
||||
85 56 95 75 54
|
||||
|
||||
65 42 46 8 83
|
||||
54 89 93 70 32
|
||||
77 53 95 34 37
|
||||
24 9 85 74 4
|
||||
3 50 14 76 60
|
||||
|
||||
24 57 43 0 60
|
||||
2 49 41 90 62
|
||||
23 16 17 75 26
|
||||
31 50 20 48 92
|
||||
18 27 44 69 76
|
||||
|
||||
1 55 29 58 66
|
||||
76 49 80 18 87
|
||||
24 20 4 38 92
|
||||
15 73 32 31 57
|
||||
61 71 52 6 60
|
||||
|
||||
90 78 56 14 80
|
||||
47 31 6 50 74
|
||||
3 36 63 25 65
|
||||
93 22 30 11 37
|
||||
4 27 45 29 42
|
||||
|
||||
34 41 12 27 99
|
||||
68 16 58 79 5
|
||||
22 81 6 48 15
|
||||
97 95 69 29 42
|
||||
61 8 23 14 70
|
||||
|
||||
22 16 19 68 76
|
||||
21 94 95 52 7
|
||||
66 59 80 50 62
|
||||
5 45 43 29 97
|
||||
83 87 28 58 51
|
||||
|
||||
73 18 43 92 54
|
||||
20 61 98 9 62
|
||||
67 19 51 24 32
|
||||
41 38 37 64 17
|
||||
12 77 56 96 82
|
||||
|
||||
56 86 12 94 96
|
||||
59 51 82 16 31
|
||||
68 15 23 28 42
|
||||
11 30 7 69 13
|
||||
35 14 18 21 4
|
||||
|
||||
39 74 21 27 84
|
||||
30 50 6 19 64
|
||||
88 73 44 67 25
|
||||
37 35 16 77 42
|
||||
85 81 15 59 68
|
||||
|
||||
29 5 32 91 59
|
||||
1 48 20 24 95
|
||||
71 3 0 60 89
|
||||
85 65 28 31 6
|
||||
87 27 19 37 11
|
||||
|
||||
36 10 26 71 11
|
||||
92 23 60 93 64
|
||||
63 80 20 42 9
|
||||
97 41 79 91 37
|
||||
8 67 56 38 30
|
||||
|
||||
56 91 36 41 79
|
||||
59 92 63 86 22
|
||||
17 32 73 48 58
|
||||
12 78 67 5 13
|
||||
30 23 44 54 24
|
||||
|
||||
83 89 64 88 28
|
||||
98 63 54 92 39
|
||||
70 60 21 22 37
|
||||
24 91 23 53 27
|
||||
10 12 65 85 32
|
||||
|
||||
77 33 14 72 65
|
||||
67 50 22 21 42
|
||||
40 69 36 30 7
|
||||
68 53 2 27 44
|
||||
66 32 47 34 54
|
||||
|
||||
46 6 84 7 63
|
||||
72 53 30 18 58
|
||||
12 28 32 33 25
|
||||
88 1 85 19 23
|
||||
75 83 26 86 57
|
||||
|
||||
59 24 46 60 3
|
||||
72 68 30 36 71
|
||||
14 37 95 63 82
|
||||
55 38 93 94 21
|
||||
20 13 69 76 6
|
||||
|
||||
55 90 73 61 77
|
||||
50 47 93 86 48
|
||||
66 85 22 32 2
|
||||
51 40 57 63 25
|
||||
5 0 72 9 59
|
||||
|
||||
1 59 73 51 94
|
||||
54 78 45 19 16
|
||||
30 97 87 52 67
|
||||
66 32 31 37 26
|
||||
23 3 65 83 6
|
||||
|
||||
37 11 53 39 83
|
||||
54 46 72 13 9
|
||||
57 27 24 96 26
|
||||
76 17 31 59 25
|
||||
68 0 48 77 60
|
||||
|
||||
18 79 54 3 94
|
||||
34 16 70 88 96
|
||||
22 78 17 85 69
|
||||
15 68 55 13 24
|
||||
27 5 63 52 9
|
||||
|
||||
27 84 82 87 8
|
||||
51 60 67 37 76
|
||||
65 59 28 36 26
|
||||
44 22 35 73 45
|
||||
1 58 23 16 77
|
||||
|
||||
73 14 0 64 88
|
||||
31 38 78 39 17
|
||||
67 96 93 76 58
|
||||
18 15 83 30 99
|
||||
91 34 20 82 43
|
||||
|
||||
10 87 15 45 0
|
||||
41 99 21 37 95
|
||||
49 18 29 44 79
|
||||
43 59 67 78 3
|
||||
97 28 53 6 7
|
||||
|
||||
8 55 17 39 67
|
||||
12 35 62 95 44
|
||||
48 29 83 0 91
|
||||
5 65 99 20 58
|
||||
23 15 52 81 75
|
||||
|
||||
50 8 42 43 47
|
||||
94 10 76 11 81
|
||||
86 14 31 79 63
|
||||
19 37 55 58 68
|
||||
48 84 25 61 23
|
||||
|
||||
77 44 23 12 1
|
||||
18 52 31 75 70
|
||||
5 85 28 89 6
|
||||
42 58 88 9 87
|
||||
38 99 57 78 72
|
||||
|
||||
17 45 77 99 81
|
||||
16 31 69 14 64
|
||||
39 62 59 13 96
|
||||
2 28 24 38 83
|
||||
3 55 1 15 75
|
||||
|
||||
66 21 68 0 78
|
||||
45 31 98 54 74
|
||||
32 97 86 14 51
|
||||
94 52 56 7 17
|
||||
88 44 33 20 77
|
||||
|
||||
69 1 70 35 26
|
||||
4 50 13 55 66
|
||||
27 24 86 81 11
|
||||
20 97 25 18 37
|
||||
71 28 68 6 15
|
||||
|
||||
44 6 93 24 17
|
||||
38 45 68 3 72
|
||||
62 34 92 90 65
|
||||
29 69 16 83 14
|
||||
71 5 67 4 47
|
||||
|
||||
61 34 67 97 93
|
||||
94 50 48 37 68
|
||||
39 3 56 41 35
|
||||
21 19 86 12 69
|
||||
73 83 28 26 90
|
||||
|
||||
48 43 25 6 91
|
||||
18 89 15 88 71
|
||||
61 22 58 10 7
|
||||
76 11 78 39 13
|
||||
75 34 4 47 45
|
||||
|
||||
27 45 10 53 21
|
||||
96 60 50 89 69
|
||||
66 34 94 84 5
|
||||
57 42 55 75 51
|
||||
33 62 74 13 86
|
||||
|
||||
15 63 2 35 11
|
||||
54 0 69 94 92
|
||||
27 50 70 10 57
|
||||
12 81 45 90 40
|
||||
22 87 61 48 44
|
||||
|
||||
68 22 95 71 42
|
||||
18 0 61 86 44
|
||||
46 29 51 23 99
|
||||
11 60 66 12 52
|
||||
53 87 41 90 49
|
168
04/main.cpp
Normal file
168
04/main.cpp
Normal file
@ -0,0 +1,168 @@
|
||||
#include <array>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
|
||||
class Bingo {
|
||||
public:
|
||||
Bingo() = default;
|
||||
~Bingo() = default;
|
||||
|
||||
void addNumberToCard(int number) {
|
||||
card[numbers / 5][numbers % 5] = {number, false};
|
||||
numbers += 1;
|
||||
}
|
||||
|
||||
void checkNumber(int number) {
|
||||
if(hasWon()) {
|
||||
invalidate();
|
||||
return;
|
||||
}
|
||||
for(int i = 0; i < 5; i++) {
|
||||
for(int j = 0; j < 5; j++) {
|
||||
if(card[i][j].first == number) {
|
||||
card[i][j].second = true;
|
||||
checkWin(number);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool hasWon() {
|
||||
return won;
|
||||
}
|
||||
|
||||
int getWinningScore() {
|
||||
return winning_score;
|
||||
}
|
||||
|
||||
void printSelf() {
|
||||
std::cout << std::endl;
|
||||
for(int i = 0; i < 5; i++) {
|
||||
for(int j = 0; j < 5; j++) {
|
||||
if(card[i][j].second) {
|
||||
std::cout << "*";
|
||||
}
|
||||
std::cout << card[i][j].first << " ";
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
bool isValid() {
|
||||
return valid;
|
||||
}
|
||||
|
||||
private:
|
||||
void checkWin(int multiplier) {
|
||||
for(int i = 0; i < 5; i++) {
|
||||
int horizontal = 0;
|
||||
int vertical = 0;
|
||||
for(int j = 0; j < 5; j++) {
|
||||
if(card[i][j].second) {
|
||||
horizontal += 1;
|
||||
}
|
||||
if(card[j][i].second) {
|
||||
vertical += 1;
|
||||
}
|
||||
}
|
||||
if(horizontal == 5 || vertical == 5) {
|
||||
won = true;
|
||||
calculateScore(multiplier);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void calculateScore(int multiplier) {
|
||||
int score = 0;
|
||||
for(int i = 0; i < 5; i++) {
|
||||
for(int j = 0; j < 5; j++) {
|
||||
if(!card[i][j].second) {
|
||||
score += card[i][j].first;
|
||||
}
|
||||
}
|
||||
}
|
||||
winning_score = score * multiplier;
|
||||
}
|
||||
|
||||
void invalidate() {
|
||||
valid = false;
|
||||
}
|
||||
|
||||
|
||||
std::array<std::array<std::pair<int,bool>, 5>, 5> card;
|
||||
int numbers = 0;
|
||||
bool won = false;
|
||||
int winning_score = -1;
|
||||
bool valid = true;
|
||||
};
|
||||
|
||||
std::pair<std::vector<int>, std::vector<Bingo>> getBingo(const std::string &file_name) {
|
||||
std::pair<std::vector<int>, std::vector<Bingo>> result;
|
||||
|
||||
std::ifstream file(file_name);
|
||||
int tmp{};
|
||||
char tmp_char{};
|
||||
std::string str;
|
||||
std::getline(file, str);
|
||||
std::stringstream ss(str);
|
||||
while(ss >> tmp) {
|
||||
result.first.push_back(tmp);
|
||||
ss >> tmp_char;
|
||||
}
|
||||
while (std::getline(file, str)) {
|
||||
if(str.empty()) {
|
||||
result.second.emplace_back();
|
||||
continue;
|
||||
}
|
||||
std::stringstream ss2(str);
|
||||
for(int i = 0; i < 5; i++) {
|
||||
ss2 >> tmp;
|
||||
result.second.back().addNumberToCard(tmp);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
int part1(const std::vector<int> &numbers, std::vector<Bingo> &bingo) {
|
||||
for(auto &number : numbers) {
|
||||
for(auto &card : bingo) {
|
||||
card.checkNumber(number);
|
||||
if(card.hasWon()) {
|
||||
return card.getWinningScore();
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int part2(const std::vector<int> &numbers, std::vector<Bingo> &bingo) {
|
||||
int last_score = -1;
|
||||
for(auto &number : numbers) {
|
||||
for(auto &card : bingo) {
|
||||
card.checkNumber(number);
|
||||
if(card.hasWon() && card.isValid()) {
|
||||
last_score = card.getWinningScore();
|
||||
}
|
||||
}
|
||||
}
|
||||
return last_score;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc < 2) {
|
||||
std::cerr << "You must provide input file!" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
auto input = getBingo(argv[1]);
|
||||
auto &numbers = input.first;
|
||||
auto &bingo = input.second;
|
||||
std::cout << "The winning score of the first winning card is \033[91;1m"
|
||||
<< part1(numbers, bingo) << "\033[0m." << std::endl;
|
||||
std::cout << "The winning score of the last winning card is \033[91;1m"
|
||||
<< part2(numbers, bingo) << "\033[0m." << std::endl;
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user