D2P2 done
This commit is contained in:
@@ -65,6 +65,34 @@ uint_fast64_t solution_part_one(std::vector<std::pair<uint_fast64_t, uint_fast64
|
||||
return running_sum;
|
||||
}
|
||||
|
||||
uint_fast64_t solution_part_two(std::vector<std::pair<uint_fast64_t, uint_fast64_t>> ranges ){
|
||||
uint_fast64_t running_sum = uint_fast64_t{0};
|
||||
for (std::vector<std::pair<uint_fast64_t, uint_fast64_t>>::const_iterator i =ranges.cbegin(); i<ranges.cend(); i++) {
|
||||
spdlog::debug("range: {} to {}", i->first, i->second);
|
||||
for (uint_fast64_t j = i->first; j<= i->second; j++) {
|
||||
std::string number = fmt::format("{}",j);
|
||||
for (uint_fast64_t pieces = {2}; pieces<=number.size(); pieces++) {
|
||||
if(number.size()%pieces !=0) continue;
|
||||
size_t substring_length = static_cast<size_t>(number.size()/pieces);
|
||||
std::string_view first_piece = std::string_view{&*number.cbegin(), static_cast<size_t>(substring_length)};
|
||||
std::string::const_iterator start = number.cbegin();
|
||||
bool invalid = {true};
|
||||
for (uint_fast64_t shift = static_cast<uint_fast64_t>(substring_length); shift+substring_length<=number.size(); shift+=substring_length) {
|
||||
|
||||
std::string_view current = std::string_view{&*(start+static_cast<long>(shift)),substring_length};
|
||||
if(current!=first_piece){
|
||||
invalid = {false}; break;
|
||||
}
|
||||
}
|
||||
if(!invalid)continue;
|
||||
running_sum+=j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return running_sum;
|
||||
}
|
||||
|
||||
|
||||
int main (int argc, char *argv[]) {
|
||||
spdlog::set_level(spdlog::level::level_enum::debug);
|
||||
@@ -85,6 +113,7 @@ int main (int argc, char *argv[]) {
|
||||
uint_fast64_t first_part_response = solution_part_one(ranges);
|
||||
spdlog::info("Solution to part one: {}", first_part_response);
|
||||
|
||||
|
||||
uint_fast64_t second_part_response = solution_part_two(ranges);
|
||||
spdlog::info("Solution to part two: {}", second_part_response);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user