From d681bdf26861b2bbe3b4c206b1a7a4930d0d5198 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 4 Dec 2025 18:17:43 +0100 Subject: aoc 2025, day 4, code cleanup --- 2025/src/day04.cpp | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) (limited to '2025') diff --git a/2025/src/day04.cpp b/2025/src/day04.cpp index 295ed75..ef3b7f5 100644 --- a/2025/src/day04.cpp +++ b/2025/src/day04.cpp @@ -1,6 +1,9 @@ +#include #include #include #include +#include +#include #include #include #include @@ -30,7 +33,7 @@ read_file(const filesystem::path& filename) return grid; } -set +array get_neighbours(const Pos& pos) { auto [col, row] = pos; @@ -47,40 +50,35 @@ get_neighbours(const Pos& pos) }; } +size_t +get_nneighbours(const set& grid, const Pos& pos) +{ + return (size_t) ranges::count_if(get_neighbours(pos), [&](const auto& neighbour) { return grid.contains(neighbour); }); +} + bool is_accessable(const set& grid, const Pos& pos) { - long nneighbours = 0; - for ( const auto neighbour: get_neighbours(pos) ) { - if ( grid.contains(neighbour) ) { - ++nneighbours; - } - } - return nneighbours < 4; + return get_nneighbours(grid, pos) < 4; } void part1(const set& grid) { - long count = 0; - for ( const auto pos: grid ) { - if ( is_accessable(grid, pos) ) { - ++count; - } - } + auto count = ranges::count_if(grid, [&](const auto& pos) { return is_accessable(grid, pos); }); cout << "Part 1: " << count << '\n'; } void part2(set grid) { - auto old_size = grid.size(); + const auto old_size = grid.size(); while ( true ) { - set remove; + vector remove; for ( const auto& pos: grid ) { if ( is_accessable(grid, pos) ) { - remove.insert(pos); + remove.emplace_back(pos); } } @@ -92,6 +90,7 @@ part2(set grid) grid.erase(pos); } } + cout << "Part 2: " << old_size - grid.size() << '\n'; } -- cgit v1.3