not like this... im getting filtered by day 3 part 3
parts 1 and 2 werent that hard though
auto solve(std::string_view line, std::string_view prefix)
{
constexpr auto to_digit = [](char c) { return c - '0'; };
constexpr auto right_aligned_cycle = [](std::string_view s, std::size_t n)
{
auto const offset = (s.size() - n % s.size()) % s.size();
return std::views::iota(0uz, n) | std::views::transform([=](std::size_t i) { return s[(i + offset) % s.size()]; });
};
line.remove_prefix(prefix.size());
auto parts = line | std::views::split(' ') | std::views::transform([](auto r) { return std::string_view{r}; });
auto it = parts.begin();
std::string_view lhs = *it++;
std::string_view rhs = *it;
auto exps = std::views::iota(0uz, rhs.size()) | std::views::reverse;
auto votes{0ULL};
for (auto [b, a, e] : std::views::zip(right_aligned_cycle(lhs, rhs.size()) | std::views::transform(to_digit),
rhs | std::views::transform(to_digit), exps))
{
votes += a * std::pow(b, e);
}
return votes;
}
auto quest(std::string_view input, std::string_view prefix)
{
auto final_score{0ULL};
for (auto line : input | std::views::split('\n'))
{
final_score += solve(std::string_view{line}, prefix);
}
return final_score;
}
int main()
{
std::println("Part I: {}\n", quest(input_part_1_k, "ISO-"));
std::println("Part II: {}\n", quest(input_part_2_k, "ISO-"));
// std::println("Part III: {}\n", quest(input_part_3_k, "ISO2-"));
return 0;
}