@@ -30,8 +30,7 @@ Node *get_node(uint64_t new_value, std::map<uint64_t, std::unique_ptr<Node>> &sp
30
30
return splits[new_value].get ();
31
31
}
32
32
33
- uint64_t part1 (const Data &data)
34
- {
33
+ uint64_t count_stones (int blinks, const Data& data) {
35
34
std::map<uint64_t , std::unique_ptr<Node>> splits;
36
35
uint64_t sum = 0 ;
37
36
@@ -41,17 +40,16 @@ uint64_t part1(const Data &data)
41
40
std::queue<std::pair<uint64_t , uint64_t >> q;
42
41
q.push ({stone, 0 });
43
42
sum += 1 ;
44
- uint64_t n_steps = 25 ;
45
43
46
44
while (!q.empty ())
47
45
{
48
46
auto val = q.front ();
49
47
Node *cur = get_node (val.first , splits);
50
48
51
49
52
- for (size_t blink = val.second ; blink < n_steps ; ++blink)
50
+ for (size_t blink = val.second ; blink < blinks ; ++blink)
53
51
{
54
- while (cur->left != nullptr && blink < n_steps )
52
+ while (cur->left != nullptr && blink < blinks )
55
53
{
56
54
if (cur->right != nullptr )
57
55
{
@@ -61,7 +59,7 @@ uint64_t part1(const Data &data)
61
59
++blink;
62
60
cur = cur->left ;
63
61
}
64
- if (blink >= n_steps )
62
+ if (blink >= blinks )
65
63
break ;
66
64
uint64_t num_digits = std::floor (std::log10 (cur->value )) + 1 ;
67
65
if (cur->value == 0 )
@@ -96,9 +94,14 @@ uint64_t part1(const Data &data)
96
94
return sum;
97
95
}
98
96
99
- int part2 (const Data &data)
97
+ uint64_t part1 (const Data &data)
98
+ {
99
+ return count_stones (25 , data);
100
+ }
101
+
102
+ uint64_t part2 (const Data &data)
100
103
{
101
- return 0 ;
104
+ return count_stones ( 75 , data) ;
102
105
}
103
106
104
107
Data parse ()
@@ -143,7 +146,7 @@ BENCHMARK_DEFINE_F(BenchmarkFixture, Part2Benchmark)
143
146
{
144
147
for (auto _ : state)
145
148
{
146
- int s = part2 (data);
149
+ uint64_t s = part2 (data);
147
150
benchmark::DoNotOptimize (s);
148
151
}
149
152
}
@@ -155,8 +158,8 @@ int main(int argc, char **argv)
155
158
{
156
159
Data data = parse ();
157
160
158
- uint64_t answer1 = 0 ;
159
- int answer2 = 0 ;
161
+ uint64_t answer1 = 198089 ;
162
+ uint64_t answer2 = 0 ;
160
163
161
164
auto first = part1 (data);
162
165
std::cout << " Part 1: " << first << std::endl;
0 commit comments