diff --git a/2025/day01.cpp b/2025/day01.cpp index 80e16aa..857e5d1 100644 --- a/2025/day01.cpp +++ b/2025/day01.cpp @@ -1,7 +1,5 @@ #include #include -#include -#include #include #include #include @@ -45,7 +43,7 @@ auto trim(std::string s) -> std::string { } // starts at 50 -constexpr auto raw_str = R"( +[[maybe_unused]]constexpr auto raw_str = R"( L68 L30 R48 @@ -59,6 +57,7 @@ L82 )"; enum class rotdir { + none, L, R }; @@ -68,14 +67,48 @@ struct rot { u32 turns; }; +auto map_char_to_rotdir(char c) -> rotdir { + switch (c) { + using enum rotdir; + case 'L': return L; + case 'R': return R; + default: return none; + } +} + +auto map_dir_to_i32(i32 value, rotdir dir) -> i32 { + switch (dir) { + using enum rotdir; + case L: return -value; + case R: + default: return value; + } +} + static auto entry([[maybe_unused]]std::span const& args) -> void { - std::string str{raw_str}; - str = str | trim; - fmt::print("{}\n", str); + // std::string str{raw_str}; + // str = str | trim; + auto str = aoc::read_text("./input.txt").value_or("") | trim; auto rot_vec = str | std::views::split("\n"sv) | std::views::transform([](auto const& str) { - return 0; + return rot{ + .dir = map_char_to_rotdir(*std::begin(str)), + .turns = u32(std::stoul(std::string{++std::begin(str), std::end(str)})) + }; }) | std::ranges::to(); + + i32 start = 50; + auto sum = std::ranges::fold_left(rot_vec, 0, [&start](auto a, auto b) { + auto c = map_dir_to_i32(b.turns % 100, b.dir); + + start = (100 + start + c) % 100; + + if (start == 0) ++a; + + return a; + }); + + fmt::print("res: {}\n", sum); } auto main([[maybe_unused]]int argc, [[maybe_unused]]char const* argv[]) -> int { diff --git a/cmake/platform.cmake b/cmake/platform.cmake index 5ab8727..c93a588 100644 --- a/cmake/platform.cmake +++ b/cmake/platform.cmake @@ -71,7 +71,7 @@ if(NOT MSVC) set(BASE_OPTIONS -Wall -Wextra - -Werror + # -Werror # fmt warnings -Wno-deprecated-literal-operator ) @@ -90,7 +90,7 @@ if(NOT MSVC) else() set(BASE_OPTIONS /W4 - /WX # warnings as errors (MSVC equivalent of -Werror) + # /WX # warnings as errors (MSVC equivalent of -Werror) /utf-8 /Zc:__cplusplus #/fsanitize=address # Doesn't work without Visual Studio