diff --git a/src/day-3-solution.cpp b/src/day-3-solution.cpp new file mode 100644 index 0000000..25d75fb --- /dev/null +++ b/src/day-3-solution.cpp @@ -0,0 +1,58 @@ +#include "spdlog/spdlog.h" +#include +#include +#include +#include +#include +#include +#include + +uint_fast64_t get_joltage_part_one(std::string& line){ + std::ranges::subrange greedy_view + = std::ranges::subrange{line.cbegin(),line.cend()-1}; + + std::string::const_iterator first_greedy_max = std::ranges::max_element(greedy_view); + + std::ranges::subrange greedy_view_second = std::ranges::subrange {first_greedy_max+1, line.cend()}; + + std::string::const_iterator second_greedy_max = std::ranges::max_element(greedy_view_second); + + return static_cast((*first_greedy_max - '0')*10 + (*second_greedy_max -'0')); +} + +uint_fast64_t get_joltage_generalized(std::string& line, uint_fast64_t digits){ + std::vector digits_pointer_store = std::vector{}; + std::string::const_iterator offset = line.cbegin(); + for (uint_fast64_t countdown = {digits}; countdown>0; countdown--) { + std::ranges::subrange greedy_view + = std::ranges::subrange{offset,line.cend()-countdown+1}; + std::string::const_iterator digit_chosen = std::ranges::max_element(greedy_view); + digits_pointer_store.push_back(digit_chosen); + offset = digit_chosen+1; + } + uint_fast64_t running_sum = uint_fast64_t {0}; + + for (std::vector::const_iterator i = digits_pointer_store.cbegin(); i!= digits_pointer_store.cend(); i++) { + running_sum*=10; + running_sum+= static_cast(**i - '0'); + } + return running_sum; +} + +void solving_engine(std::ifstream& file) noexcept{ + std::string current_line = std::string {}; + uint_fast64_t running_joltage_sum_part_one = uint_fast64_t {0}; + uint_fast64_t running_joltage_sum_part_two = uint_fast64_t {0}; + while(std::getline(file, current_line)){ + running_joltage_sum_part_one += get_joltage_part_one(current_line); + running_joltage_sum_part_two += get_joltage_generalized(current_line, 12); + } + spdlog::info("Part one Solution: {}", running_joltage_sum_part_one); + spdlog::info("Part two solution: {}", running_joltage_sum_part_two); +} + +int main () { + std::ifstream input_file = std::ifstream {"testcases/day-3.in", std::ios_base::binary}; + solving_engine(input_file); + return 0; +}