@@ -30,8 +30,7 @@ Node *get_node(uint64_t new_value, std::map<uint64_t, std::unique_ptr<Node>> &sp
3030 return splits[new_value].get ();
3131}
3232
33- uint64_t part1 (const Data &data)
34- {
33+ uint64_t count_stones (int blinks, const Data& data) {
3534 std::map<uint64_t , std::unique_ptr<Node>> splits;
3635 uint64_t sum = 0 ;
3736
@@ -41,17 +40,16 @@ uint64_t part1(const Data &data)
4140 std::queue<std::pair<uint64_t , uint64_t >> q;
4241 q.push ({stone, 0 });
4342 sum += 1 ;
44- uint64_t n_steps = 25 ;
4543
4644 while (!q.empty ())
4745 {
4846 auto val = q.front ();
4947 Node *cur = get_node (val.first , splits);
5048
5149
52- for (size_t blink = val.second ; blink < n_steps ; ++blink)
50+ for (size_t blink = val.second ; blink < blinks ; ++blink)
5351 {
54- while (cur->left != nullptr && blink < n_steps )
52+ while (cur->left != nullptr && blink < blinks )
5553 {
5654 if (cur->right != nullptr )
5755 {
@@ -61,7 +59,7 @@ uint64_t part1(const Data &data)
6159 ++blink;
6260 cur = cur->left ;
6361 }
64- if (blink >= n_steps )
62+ if (blink >= blinks )
6563 break ;
6664 uint64_t num_digits = std::floor (std::log10 (cur->value )) + 1 ;
6765 if (cur->value == 0 )
@@ -96,9 +94,14 @@ uint64_t part1(const Data &data)
9694 return sum;
9795}
9896
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)
100103{
101- return 0 ;
104+ return count_stones ( 75 , data) ;
102105}
103106
104107Data parse ()
@@ -143,7 +146,7 @@ BENCHMARK_DEFINE_F(BenchmarkFixture, Part2Benchmark)
143146{
144147 for (auto _ : state)
145148 {
146- int s = part2 (data);
149+ uint64_t s = part2 (data);
147150 benchmark::DoNotOptimize (s);
148151 }
149152}
@@ -155,8 +158,8 @@ int main(int argc, char **argv)
155158{
156159 Data data = parse ();
157160
158- uint64_t answer1 = 0 ;
159- int answer2 = 0 ;
161+ uint64_t answer1 = 198089 ;
162+ uint64_t answer2 = 0 ;
160163
161164 auto first = part1 (data);
162165 std::cout << " Part 1: " << first << std::endl;
0 commit comments