aboutsummaryrefslogtreecommitdiff
path: root/2025/src/day04.cpp
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2025-12-04 18:18:14 +0100
committerThomas Schmucker <ts@its1.de>2025-12-04 18:18:14 +0100
commitb3fc02c96b041e17ce2d0119b3900a97e9ec7cc0 (patch)
tree830e668514e47b2d260fac2e9836e63a9c39b64e /2025/src/day04.cpp
parentd681bdf26861b2bbe3b4c206b1a7a4930d0d5198 (diff)
downloadadvent-of-code-b3fc02c96b041e17ce2d0119b3900a97e9ec7cc0.tar.gz
advent-of-code-b3fc02c96b041e17ce2d0119b3900a97e9ec7cc0.tar.bz2
advent-of-code-b3fc02c96b041e17ce2d0119b3900a97e9ec7cc0.zip
aoc 2025, day 4, added optimized version
Diffstat (limited to '2025/src/day04.cpp')
-rw-r--r--2025/src/day04.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/2025/src/day04.cpp b/2025/src/day04.cpp
index ef3b7f5..75c86d9 100644
--- a/2025/src/day04.cpp
+++ b/2025/src/day04.cpp
@@ -94,6 +94,46 @@ part2(set<Pos> grid)
94 cout << "Part 2: " << old_size - grid.size() << '\n'; 94 cout << "Part 2: " << old_size - grid.size() << '\n';
95} 95}
96 96
97void
98part2_bfs(set<Pos> grid)
99{
100 const auto old_size = grid.size();
101
102 map<Pos, size_t> counts;
103 for ( const auto& pos: grid ) {
104 counts[pos] = get_nneighbours(grid, pos);
105 }
106
107 queue<Pos> queue;
108 for ( const auto& [pos, count]: counts ) {
109 if ( count < 4 ) {
110 queue.emplace(pos);
111 }
112 }
113
114 while ( !queue.empty() ) {
115 const auto pos = queue.front();
116 queue.pop();
117
118 if ( !grid.contains(pos) ) {
119 continue;
120 }
121
122 grid.erase(pos);
123
124 for ( const auto& neighbour: get_neighbours(pos) ) {
125 if ( !grid.contains(neighbour) ) {
126 continue;
127 }
128 if ( --counts[neighbour] == 3 ) {
129 queue.emplace(neighbour);
130 }
131 }
132 }
133
134 cout << "Part 2: " << old_size - grid.size() << '\n';
135}
136
97} // namespace 137} // namespace
98 138
99int 139int
@@ -102,4 +142,5 @@ main()
102 auto grid = read_file("data/day04.txt"); 142 auto grid = read_file("data/day04.txt");
103 part1(grid); 143 part1(grid);
104 part2(grid); 144 part2(grid);
145 part2_bfs(grid);
105} 146}