From 8062f9a537520891fa03fbdcd7828cff1b8e8a8c Mon Sep 17 00:00:00 2001 From: mnerv <24420859+mnerv@users.noreply.github.com> Date: Sun, 14 Dec 2025 20:43:34 +0100 Subject: [PATCH] 2025 day 05 p2 --- 2025/day05.cpp | 99 +++++++++++++++++++++++++++++++++++-------- 2025/day08.cpp | 112 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+), 18 deletions(-) create mode 100644 2025/day08.cpp diff --git a/2025/day05.cpp b/2025/day05.cpp index c0d54ab..875f4b6 100644 --- a/2025/day05.cpp +++ b/2025/day05.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "fmt/std.h" @@ -34,11 +35,6 @@ static auto entry([[maybe_unused]]std::span const& args) -> void { 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 id_spec = str | std::views::split("\r\n\r\n"sv) | std::views::transform([](auto const& str) { return aoc::trim({std::begin(str), std::end(str)}); }) | std::ranges::to(); @@ -56,27 +52,94 @@ static auto entry([[maybe_unused]]std::span const& args) -> void { return std::stod(std::string{std::begin(str), std::end(str)}); }) | std::ranges::to(); - f64 sum = 0; + struct range { + f64 start; + f64 end; + }; - for (usize i = 0; i < ids.size(); ++i) { - auto const id = ids[i]; - bool is_valid = false; - for (usize j = 0; j < id_range.size(); ++j) { - auto const a = id_range[j][0]; - auto const b = id_range[j][1]; + // f64 sum = 0; - if (id >= a && id <= b) { - is_valid = true; - break; - } + // for (usize i = 0; i < ids.size(); ++i) { + // auto const id = ids[i]; + // bool is_valid = false; + // for (usize j = 0; j < id_range.size(); ++j) { + // auto const a = id_range[j][0]; + // auto const b = id_range[j][1]; + // + // if (id >= a && id <= b) { + // is_valid = true; + // break; + // } + // } + // + // fmt::print("id: {} is {}\n", id, is_valid ? "valid" : "not valid"); + // + // if (is_valid) ++sum; + // } + + std::vector range_vec{}; + for (usize i = 0; i < id_range.size(); ++i) { + auto const a = id_range[i][0]; + auto const b = id_range[i][1]; + range_vec.push_back({a, b}); + } + + std::ranges::sort(range_vec, [](auto a, auto b) { + return a.start < b.start; + }); + fmt::print("----------\n"); + + // for (auto const& r : range_vec) { + // fmt::print("{}-{}\n", r.start, r.end); + // } + // + // fmt::print("----------\n"); + + std::vector ranges{}; + for (usize i = 0; i < range_vec.size(); i += 1) { + auto const& r = range_vec[i]; + if (ranges.empty()) { + ranges.push_back(r); + continue; } - fmt::print("id: {} is {}\n", id, is_valid ? "valid" : "not valid"); + if (ranges.back().start <= r.start && ranges.back().end >= r.end) { + continue; + } - if (is_valid) ++sum; + if (ranges.back().end >= r.start) { + ranges.back().end = r.end; + continue; + } + + ranges.push_back(r); + } + + fmt::print("\n"); + + f64 sum = 0.0; + for (auto const& r : ranges) { + // fmt::print("{}-{} ", r.start, r.end); + auto const d = (r.end - r.start) + 1; + fmt::print("{}\n", d); + sum += d; } fmt::print("res: {}\n", sum); + + // + // std::vector ranges{}; + // for (auto const& value : set) ranges.push_back(value); + // set = {}; + // std::ranges::sort(ranges); + // + // + // // for (auto const& id : valid_ids) { + // // fmt::print("{} ", id); + // // } + // fmt::print("\n"); + // + // fmt::print("res: {}\n", sum); } auto main([[maybe_unused]]int argc, [[maybe_unused]]char const* argv[]) -> int { diff --git a/2025/day08.cpp b/2025/day08.cpp new file mode 100644 index 0000000..57cccde --- /dev/null +++ b/2025/day08.cpp @@ -0,0 +1,112 @@ +#include +#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"( +162,817,812 +57,618,57 +906,360,560 +592,479,940 +352,342,300 +466,668,158 +542,29,236 +431,825,988 +739,650,466 +52,470,668 +216,146,977 +819,987,18 +117,168,530 +805,96,715 +346,949,466 +970,615,88 +941,993,340 +862,61,35 +984,92,344 +425,690,689 +)"; + +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); + + auto mat = str | std::views::split("\n"sv) | std::views::transform([](auto line) { + return line | std::views::split(""sv) + | std::views::transform([](auto tok) { + return std::string{std::begin(tok), std::end(tok)}; + }) + | std::ranges::to(); + }) | std::ranges::to(); + + struct beam { + usize row; + usize col; + }; + + std::vector beams{}; + for (usize i = 0; i < mat.size(); ++i) { + for (usize j = 0; j < mat[i].size(); ++j) { + if (mat[i][j] == "S") { + beams.push_back({i, j}); + break; + } + + auto const size = beams.size(); + for (usize k = 0; k < size; ++k) { + if (beams[k].row == i - 1 && beams[k].col == j) { + if (mat[i][j] == ".") { + mat[i][j] = "|"; + beams[k] = {i, j}; + } else if (mat[i][j] == "^") { + beams[k] = {i, j - 1}; + beams.push_back({i, j + 1}); + mat[i][j - 1] = "|"; + mat[i][j + 1] = "|"; + } + } + } + } + } + + f64 sum = 0.0; + for (usize i = 0; i < mat.size(); ++i) { + for (usize j = 0; j < mat[i].size(); ++j) { + if (mat[i][j] == "^") { + if (mat[i - 1][j] == "|") sum += 1; + } + } + } + + fmt::print("res: {}\n", sum); + + // for (auto const& row : mat) { + // for (auto const& col : row) { + // fmt::print("{}", col); + // } + // fmt::print("\n"); + // } +} + +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; +}