This commit is contained in:
2025-12-03 19:42:13 -06:00
parent e6958a531d
commit daf2dd0f31

58
src/day-3-solution.cpp Normal file
View File

@@ -0,0 +1,58 @@
#include "spdlog/spdlog.h"
#include <algorithm>
#include <concepts>
#include <fstream>
#include <ranges>
#include <string>
#include <sys/types.h>
#include <vector>
uint_fast64_t get_joltage_part_one(std::string& line){
std::ranges::subrange<std::string::const_iterator, std::string::const_iterator> greedy_view
= std::ranges::subrange<std::string::const_iterator, std::string::const_iterator>{line.cbegin(),line.cend()-1};
std::string::const_iterator first_greedy_max = std::ranges::max_element(greedy_view);
std::ranges::subrange<std::string::const_iterator, std::string::const_iterator> greedy_view_second = std::ranges::subrange<std::string::const_iterator, std::string::const_iterator> {first_greedy_max+1, line.cend()};
std::string::const_iterator second_greedy_max = std::ranges::max_element(greedy_view_second);
return static_cast<uint_fast64_t>((*first_greedy_max - '0')*10 + (*second_greedy_max -'0'));
}
uint_fast64_t get_joltage_generalized(std::string& line, uint_fast64_t digits){
std::vector<std::string::const_iterator> digits_pointer_store = std::vector<std::string::const_iterator>{};
std::string::const_iterator offset = line.cbegin();
for (uint_fast64_t countdown = {digits}; countdown>0; countdown--) {
std::ranges::subrange<std::string::const_iterator, std::string::const_iterator> greedy_view
= std::ranges::subrange<std::string::const_iterator, std::string::const_iterator>{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<std::string::const_iterator>::const_iterator i = digits_pointer_store.cbegin(); i!= digits_pointer_store.cend(); i++) {
running_sum*=10;
running_sum+= static_cast<uint_fast64_t>(**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;
}