diff --git a/2025/day06.cpp b/2025/day06.cpp index 9810b9a..0f6c568 100644 --- a/2025/day06.cpp +++ b/2025/day06.cpp @@ -15,33 +15,31 @@ 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 +[[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); + // 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) { + auto vec = str | std::views::split("\r\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)}; + return aoc::trim(std::string{std::begin(tok), std::end(tok)}); }) | std::ranges::to(); }) | std::ranges::to(); - std::vector> nums{}; + std::vector> nums{}; std::vector ops{}; for (usize i = 0; i < vec.size(); ++i) { @@ -52,7 +50,7 @@ static auto entry([[maybe_unused]]std::span const& args) -> void { ops.push_back(value); continue; } - nums[j].push_back(std::stod(vec[i][j])); + nums[j].push_back(vec[i][j]); } } @@ -63,14 +61,62 @@ static auto entry([[maybe_unused]]std::span const& args) -> void { 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]; + if (op == "*") row_sum *= std::stod(nums[i][j]); + else if (op == "+") row_sum += std::stod(nums[i][j]); } // fmt::print("sum: {}\n", row_sum); sum += row_sum; } - fmt::print("res: {}\n", sum); + auto lines = str | std::views::split("\r\n"sv) | std::views::transform([](auto&& line) { + return std::string{std::begin(line), std::end(line)}; + }) | std::ranges::to(); + + // for (usize i = 0; i < lines.size(); ++i) { + // fmt::print("| {} |\n", lines[i]); + // } + + for (usize i = 0; i < lines.size(); ++i) { + fmt::print("size: {}\n", lines[i].size()); + } + + std::vector> mat{}; + auto const w = lines[0].size(); + fmt::print("w: {}\n", w); + + for (isize j = w - 1; j >= 0; --j) { + std::string tmp{}; + if (mat.empty()) mat.push_back({}); + for (usize i = 0; i < lines.size() - 1; ++i) { + tmp += lines[i][j]; + } + + mat.back().push_back(aoc::trim(tmp)); + + auto const ch = lines[lines.size() - 2][j]; + if (ch == '+' || ch == '*') { + mat.push_back({}); + continue; + } + } + + f64 new_sum = 0.0; + for (usize i = 0; i < mat.size() - 1; ++i) { + auto const& op = ops[mat.size() - 2 - i]; + f64 row_sum = op == "*" ? 1.0 : 0.0; + for (usize j = 0; j < mat[i].size(); ++j) { + if (mat[i][j].empty()) continue; + + fmt::print("{},", aoc::trim(mat[i][j])); + + if (op == "*") row_sum *= std::stod(aoc::trim(mat[i][j])); + else if (op == "+") row_sum += std::stod(aoc::trim(mat[i][j])); + } + new_sum += row_sum; + fmt::print("\n"); + } + + fmt::print("res: {}, {}\n", sum, new_sum); } auto main([[maybe_unused]]int argc, [[maybe_unused]]char const* argv[]) -> int { diff --git a/2025/day09.cpp b/2025/day09.cpp new file mode 100644 index 0000000..57cccde --- /dev/null +++ b/2025/day09.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; +}