Skip to content

Commit 742b186

Browse files
committed
of course part 2 is hard...
1 parent 7c13f6f commit 742b186

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

2024/src/day11.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

104107
Data 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

Comments
 (0)