aoc24: add day16
This commit is contained in:
@@ -20,7 +20,7 @@ public:
|
||||
m_stones = str | std::views::filter([](auto const& c) { return c != '\n'; })
|
||||
| std::views::split(" "sv)
|
||||
| std::views::transform([](auto const& c_str) {
|
||||
return std::stoll(std::string(std::begin(c_str), std::end(c_str)));
|
||||
return i64(std::stoll(std::string(std::begin(c_str), std::end(c_str))));
|
||||
}) | std::ranges::to<std::vector>();
|
||||
}
|
||||
|
||||
@@ -44,15 +44,16 @@ public:
|
||||
m_stones = stones;
|
||||
}
|
||||
|
||||
auto blink(usize order, std::span<i64*> const& stones) -> void {
|
||||
auto blink(usize order, std::span<i64> const& stones) -> void {
|
||||
std::vector<i64> compute{};
|
||||
|
||||
for (usize i = 0; i < stones.size(); ++i) {
|
||||
auto const stone = stones[i];
|
||||
auto const str = std::to_string(*stone);
|
||||
auto const str = std::to_string(stone);
|
||||
|
||||
if (stone == 0) compute.emplace_back(1);
|
||||
else if (str.length() % 2 == 0) {
|
||||
fmt::print("{}\n", str);
|
||||
auto const a = std::stoll(str.substr(0, str.length() / 2));
|
||||
auto const b = std::stoll(str.substr(str.length() / 2));
|
||||
compute.emplace_back(a);
|
||||
@@ -115,7 +116,7 @@ auto aoc24::day11([[maybe_unused]]std::span<char const*> const& args) -> std::ex
|
||||
auto const max_threads = std::thread::hardware_concurrency();
|
||||
|
||||
for (i32 i = 0; i < 75; ++i) {
|
||||
auto const& stones = magic.data();
|
||||
auto stones = magic.data();
|
||||
auto chunk_size = stones.size() / max_threads;
|
||||
if (chunk_size == 0) chunk_size = stones.size();
|
||||
|
||||
@@ -125,8 +126,8 @@ auto aoc24::day11([[maybe_unused]]std::span<char const*> const& args) -> std::ex
|
||||
auto end_index = std::min((k + 1) * chunk_size, stones.size());
|
||||
if (start_index >= stones.size()) break;
|
||||
|
||||
// Fix: Proper range span construction
|
||||
std::span<i64*> split{stones.data(), static_cast<std::size_t>(2)};
|
||||
std::span<i64> sp{stones};
|
||||
std::span<i64> split = sp.subspan(start_index, end_index);
|
||||
threads.emplace_back([&]{ magic.blink(k, split); });
|
||||
}
|
||||
for (usize k = 0; k < threads.size(); ++k) {
|
||||
|
||||
Reference in New Issue
Block a user