From d3a6fda730b31b15a0e22f6a07cd81efbe3e18e0 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Sun, 29 Dec 2024 15:13:26 -0600 Subject: [PATCH] fiddle --- 2024/19.cpp | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/2024/19.cpp b/2024/19.cpp index 39b3d17..fdfbcb3 100644 --- a/2024/19.cpp +++ b/2024/19.cpp @@ -6,8 +6,8 @@ #include #include -#include #include +#include #include #include @@ -16,44 +16,53 @@ namespace qi = boost::spirit::qi; using std::istream; using std::ostream; using std::size_t; -using std::string_view; using std::string; +using std::string_view; using std::tuple; using std::uint64_t; using std::vector; -namespace { - -auto ways(vector const& towels, string const& design) -> uint64_t +namespace { - vector counts(design.size() + 1); - counts[0] = 1; - for (size_t i = 0; i < design.size(); i++) { - auto const suffix = string_view{ begin(design) + i, end(design) }; - for (auto && towel : towels) { - if (suffix.starts_with(towel)) { - counts[i + towel.size()] += counts[i]; + auto ways(const vector &towels, const string &design) -> uint64_t + { + const auto n = design.size(); + vector counts(n + 1); + counts[0] = 1; + + for (size_t i = 0; i < n; i++) + { + string_view const suffix{begin(design) + i, end(design)}; + for (auto &&towel : towels) + { + if (suffix.starts_with(towel)) + { + counts[i + towel.size()] += counts[i]; + } } } - } - return counts.back(); -} + return counts.back(); + } } // namespace -auto Main(istream & in, ostream & out) -> void +auto Main(istream &in, ostream &out) -> void { - auto const [towels, designs] = + const auto [towels, designs] = aocpp::ParseSimple , vector>> (in, +qi::alpha % ", " >> "\n\n" >> *(+qi::alpha >> "\n")); uint64_t p1 = 0, p2 = 0; - for (auto && d : designs) { - auto const n = ways(towels, d); - if (n > 0) { p1++; } + for (auto &&design : designs) + { + const auto n = ways(towels, design); + if (n > 0) + { + p1++; + } p2 += n; }