diff --git a/2024/src/day19.cpp b/2024/src/day19.cpp index f9e9881..35e02f5 100644 --- a/2024/src/day19.cpp +++ b/2024/src/day19.cpp @@ -14,32 +14,6 @@ struct Data std::vector designs; }; -bool check_design(std::string_view design, const Trie &t, std::unordered_map &cache) -{ - if (design.empty()) - { - return true; - } - - if (cache.count(design)) - { - return cache[design]; - } - - std::vector match = t.search(design); - for (auto m : match) - { - if (check_design(design.substr(m), t, cache)) - { - cache[design] = true; - return true; - } - } - - cache[design] = false; - return false; -} - int64_t count_ways(std::string_view design, const Trie &t, std::unordered_map &cache) { if (design.empty()) @@ -66,7 +40,7 @@ int64_t count_ways(std::string_view design, const Trie &t, std::unordered_map cache; + std::unordered_map cache; for (const auto &pattern : data.patterns) { t.insert(pattern); @@ -75,10 +49,7 @@ int part1(const Data &data) int possible = 0; for (auto &design : data.designs) { - if (check_design(design, t, cache)) - { - ++possible; - } + possible += count_ways(design, t, cache) > 0 ? 1 : 0; } return possible; }