Skip to content

Commit ad9fcb7

Browse files
committed
combining parts 1 and 2
1 parent 0c55672 commit ad9fcb7

File tree

1 file changed

+13
-38
lines changed

1 file changed

+13
-38
lines changed

2024/src/day10.cpp

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -19,76 +19,51 @@ bool is_in_grid(const Pos& p, const Data& data) {
1919
return p.x >= 0 && p.y >= 0 && p.x < data.map[0].size() && p.y < data.map.size();
2020
}
2121

22-
std::set<Pos> find_nines(
22+
std::pair<std::set<Pos>, int> find_nines(
2323
Pos cur,
24-
std::map<Pos, std::set<Pos>>& leads_to_nine,
24+
std::map<Pos, std::pair<std::set<Pos>, int>>& leads_to_nine,
2525
const Data& data) {
26-
if (!leads_to_nine.contains(cur)) {
27-
leads_to_nine[cur] = {};
28-
}
29-
else {
26+
if (leads_to_nine.contains(cur)) {
3027
return leads_to_nine[cur];
3128
}
29+
3230
int cur_val = data.map[cur.y][cur.x];
3331
if (cur_val == 9) {
34-
leads_to_nine[cur].insert(cur);
32+
leads_to_nine[cur] = {{cur}, 1};
3533
return leads_to_nine[cur];
3634
}
3735

36+
leads_to_nine[cur] = {};
3837
for(auto& dir: directions) {
3938
auto next = cur + dir;
4039
if (is_in_grid(next, data) && data.map[next.y][next.x] - 1 == cur_val) {
4140
auto result = find_nines(next, leads_to_nine, data);
42-
for(auto& r : result) {
43-
leads_to_nine[cur].insert(r);
44-
}
41+
leads_to_nine[cur].first.insert(result.first.begin(), result.first.end());
42+
leads_to_nine[cur].second += result.second;
4543
}
4644
}
4745

4846
return leads_to_nine[cur];
4947
}
5048

51-
int all_trails(
52-
Pos cur,
53-
std::map<Pos, int>& leads_to_nine,
54-
const Data& data) {
55-
if (leads_to_nine.contains(cur)) {
56-
return leads_to_nine[cur];
57-
}
58-
int cur_val = data.map[cur.y][cur.x];
59-
if (cur_val == 9) {
60-
return 1;
61-
}
62-
63-
int total = 0;
64-
for(auto& dir: directions) {
65-
auto next = cur + dir;
66-
if (is_in_grid(next, data) && data.map[next.y][next.x] - 1 == cur_val) {
67-
total += all_trails(next, leads_to_nine, data);
68-
}
69-
}
70-
71-
return total;
72-
}
73-
7449
int part1(const Data &data)
7550
{
76-
std::map<Pos, std::set<Pos>> leads_to_nine;
51+
std::map<Pos, std::pair<std::set<Pos>, int>> leads_to_nine;
7752

7853
int sum = 0;
7954
for(auto& zero : data.zeros) {
80-
sum += find_nines(zero, leads_to_nine, data).size();
55+
sum += find_nines(zero, leads_to_nine, data).first.size();
8156
}
8257
return sum;
8358
}
8459

8560
int part2(const Data &data)
8661
{
87-
std::map<Pos, int> leads_to_nine;
62+
std::map<Pos, std::pair<std::set<Pos>, int>> leads_to_nine;
8863

8964
int sum = 0;
9065
for(auto& zero : data.zeros) {
91-
sum += all_trails(zero, leads_to_nine, data);
66+
sum += find_nines(zero, leads_to_nine, data).second;
9267
}
9368
return sum;
9469
}
@@ -157,7 +132,7 @@ int main(int argc, char **argv)
157132
Data data = parse();
158133

159134
int answer1 = 574;
160-
int answer2 = 0;
135+
int answer2 = 1238;
161136

162137
auto first = part1(data);
163138
std::cout << "Part 1: " << first << std::endl;

0 commit comments

Comments
 (0)