From 11ed18a19949ea88dac5bdc20dde9fd3a4c7b14e Mon Sep 17 00:00:00 2001 From: mnerv <24420859+mnerv@users.noreply.github.com> Date: Sun, 14 Dec 2025 17:39:21 +0100 Subject: [PATCH] 2025 day 06 p1 --- 2025/CMakeLists.txt | 1 + 2025/day06.cpp | 84 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 2025/day06.cpp diff --git a/2025/CMakeLists.txt b/2025/CMakeLists.txt index 348a859..1aab3c0 100644 --- a/2025/CMakeLists.txt +++ b/2025/CMakeLists.txt @@ -33,4 +33,5 @@ add_day_executables( "day03.cpp" "day04.cpp" "day05.cpp" + "day06.cpp" ) diff --git a/2025/day06.cpp b/2025/day06.cpp new file mode 100644 index 0000000..9810b9a --- /dev/null +++ b/2025/day06.cpp @@ -0,0 +1,84 @@ +#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"( +123 328 51 64 + 45 64 387 23 + 6 98 215 314 +* + * + +)"; + +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 vec = str | std::views::split("\n"sv) | std::views::transform([](auto&& line) { + return line | std::views::split(" "sv) + | std::views::filter([](auto&& tok) { return !std::ranges::empty(tok); }) + | std::views::transform([](auto&& tok) { + return std::string{std::begin(tok), std::end(tok)}; + }) + | std::ranges::to(); + }) | std::ranges::to(); + + std::vector> nums{}; + std::vector ops{}; + + for (usize i = 0; i < vec.size(); ++i) { + for (usize j = 0; j < vec[i].size(); ++j) { + auto const& value = vec[i][j]; + if (nums.size() <= j) nums.push_back({}); + if (value == "*" || value == "+") { + ops.push_back(value); + continue; + } + nums[j].push_back(std::stod(vec[i][j])); + } + } + + // fmt::print("{} {}\n", nums.size(), ops.size()); + + f64 sum = 0.0; + for (usize i = 0; i < nums.size(); ++i) { + auto const& op = ops[i]; + f64 row_sum = op == "*" ? 1.0 : 0.0; + for (usize j = 0; j < nums[i].size(); ++j) { + if (op == "*") row_sum *= nums[i][j]; + else if (op == "+") row_sum += nums[i][j]; + } + // fmt::print("sum: {}\n", row_sum); + sum += row_sum; + } + + fmt::print("res: {}\n", sum); +} + +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; +}