aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2025-12-08 12:43:10 +0100
committerThomas Schmucker <ts@its1.de>2025-12-08 12:43:10 +0100
commit2e9d0706ec4cdfa7171dd079d497cd81ee03bd36 (patch)
tree03a82ccf9d3b0f5cb4e83b17af734e6e3f26bb89
parent3447cd58384cce987f6acd503a5202b3aa65c02d (diff)
downloadadvent-of-code-2e9d0706ec4cdfa7171dd079d497cd81ee03bd36.tar.gz
advent-of-code-2e9d0706ec4cdfa7171dd079d497cd81ee03bd36.tar.bz2
advent-of-code-2e9d0706ec4cdfa7171dd079d497cd81ee03bd36.zip
aoc 2025, day 8, part 2
-rw-r--r--2025/src/day08.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/2025/src/day08.cpp b/2025/src/day08.cpp
index 366d827..7a3c3b1 100644
--- a/2025/src/day08.cpp
+++ b/2025/src/day08.cpp
@@ -28,12 +28,16 @@ public:
28 return parent_[n]; 28 return parent_[n];
29 } 29 }
30 30
31 void unite(size_t a, size_t b) 31 bool unite(size_t a, size_t b)
32 { 32 {
33 a = find(a); 33 a = find(a);
34 b = find(b); 34 b = find(b);
35 35
36 parent_[b] = a; 36 if ( a != b ) {
37 parent_[b] = a;
38 return true;
39 }
40 return false;
37 } 41 }
38 42
39private: 43private:
@@ -112,6 +116,35 @@ part1(const vector<Pos>& list)
112 cout << "Part 1: " << sizes[0] * sizes[1] * sizes[2] << '\n'; 116 cout << "Part 1: " << sizes[0] * sizes[1] * sizes[2] << '\n';
113} 117}
114 118
119void
120part2(const vector<Pos>& list)
121{
122 using Dist = tuple<double, size_t, size_t>; // (Distanz, Von, Nach)
123
124 // Distanzen paarweise erfassen...
125 vector<Dist> dists;
126 for ( size_t i = 0; i != list.size(); ++i ) {
127 for ( size_t j = i + 1; j != list.size(); ++j ) {
128 dists.emplace_back(get_distance(list[i], list[j]), i, j);
129 }
130 }
131
132 // ... und nach Distanz sortieren
133 ranges::sort(dists);
134
135 UnionFind unionFind(list.size());
136
137 size_t count = 1;
138 for ( auto [dist, a, b]: dists ) {
139 if ( unionFind.unite(a, b) ) {
140 if ( ++count == list.size() ) {
141 cout << "Part 2: " << get<0>(list[a]) * get<0>(list[b]) << '\n';
142 return;
143 }
144 }
145 }
146}
147
115} // namespace 148} // namespace
116 149
117int 150int
@@ -119,4 +152,5 @@ main()
119{ 152{
120 auto data = read_file("data/day08.txt"); 153 auto data = read_file("data/day08.txt");
121 part1(data); 154 part1(data);
155 part2(data);
122} 156}