From 60e78353d7ef3e70b255d6a01a77adf5e8f08981 Mon Sep 17 00:00:00 2001 From: mnerv <24420859+mnerv@users.noreply.github.com> Date: Sun, 14 Dec 2025 12:43:52 +0100 Subject: [PATCH] 2025 day 4 p1 --- 2025/CMakeLists.txt | 1 + 2025/day04.cpp | 83 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 2025/day04.cpp diff --git a/2025/CMakeLists.txt b/2025/CMakeLists.txt index 4fd1213..7626e6e 100644 --- a/2025/CMakeLists.txt +++ b/2025/CMakeLists.txt @@ -31,4 +31,5 @@ add_day_executables( "day01.cpp" "day02.cpp" "day03.cpp" + "day04.cpp" ) diff --git a/2025/day04.cpp b/2025/day04.cpp new file mode 100644 index 0000000..9eb20fa --- /dev/null +++ b/2025/day04.cpp @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "fmt/std.h" + +#include "aoc/types.hpp" +#include "aoc/utils.hpp" + +using namespace std::string_view_literals; +using namespace aoc::types; + +// starts at 50 +[[maybe_unused]]constexpr auto raw_str = R"( +..@@.@@@@. +@@@.@.@.@@ +@@@@@.@.@@ +@.@@@@..@. +@@.@@@@.@@ +.@@@@@@@.@ +.@.@.@.@@@ +@.@@@.@@@@ +.@@@@@@@@. +@.@.@@@.@. +)"; + +static auto entry([[maybe_unused]]std::span const& args) -> void { + // std::string str{raw_str}; + auto str = aoc::read_text("./input.txt").value_or(""); + str = aoc::trim(str); + + fmt::print("INPUT\n"); + fmt::print("⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼⎽⎼⎻⎺⎻⎼\n"); + fmt::print("{}\n", str); + fmt::print("{}\n", std::string(80, '-')); + + auto grid = str | std::views::split("\n"sv) | std::views::transform([](auto const& str) { + return aoc::trim(std::string{std::begin(str), std::end(str)}) | + std::views::transform([](auto const& ch) { return ch; }) | + std::ranges::to(); + }) | std::ranges::to(); + + u64 access = 0; + for (isize i = 0; i < isize(grid.size()); ++i) { + for (isize j = 0; j < isize(grid[i].size()); ++j) { + auto const v = grid[i][j]; + if (v == '.') continue; + + u64 sum = 0; + if (i - 1 >= 0 && j - 1 >= 0 && grid[i - 1][j - 1] == '@') ++sum; + if (i - 1 >= 0 && grid[i - 1][j] == '@') ++sum; + if (i - 1 >= 0 && j + 1 < isize(grid[i].size()) && grid[i - 1][j + 1] == '@') ++sum; + + if (j - 1 >= 0 && grid[i][j - 1] == '@') ++sum; + if (j + 1 < isize(grid[i].size()) && grid[i][j + 1] == '@') ++sum; + + if (i + 1 < isize(grid.size()) && j - 1 >= 0 && grid[i + 1][j - 1] == '@') ++sum; + if (i + 1 < isize(grid.size()) && grid[i + 1][j] == '@') ++sum; + if (i + 1 < isize(grid.size()) && j + 1 < isize(grid[i].size()) && grid[i + 1][j + 1] == '@') ++sum; + + if (sum < 4) { + // fmt::print("{},{}: {}\n", i, j, sum); + ++access; + } + } + } + + fmt::print("res: {}\n", access); +} + +auto main([[maybe_unused]]int argc, [[maybe_unused]]char const* argv[]) -> int { + try { + entry({argv, std::next(argv, argc)}); + } catch (std::exception const& e) { + fmt::print(stderr, "{}\n", e.what()); + return 1; + } + return 0; +}