2024-19
This commit is contained in:
parent
849812d2e3
commit
44d79ff3ef
62
2024/19.cpp
Normal file
62
2024/19.cpp
Normal file
@ -0,0 +1,62 @@
|
||||
#include <aocpp/Parsing.hpp>
|
||||
#include <aocpp/Startup.hpp>
|
||||
|
||||
#include <boost/spirit/include/qi.hpp>
|
||||
#include <boost/fusion/include/std_tuple.hpp>
|
||||
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <string_view>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
namespace qi = boost::spirit::qi;
|
||||
|
||||
using std::istream;
|
||||
using std::ostream;
|
||||
using std::size_t;
|
||||
using std::string_view;
|
||||
using std::string;
|
||||
using std::tuple;
|
||||
using std::uint64_t;
|
||||
using std::vector;
|
||||
|
||||
namespace {
|
||||
|
||||
auto ways(vector<string> const& towels, string const& design) -> uint64_t
|
||||
{
|
||||
vector<uint64_t> 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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return counts.back();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
auto Main(istream & in, ostream & out) -> void
|
||||
{
|
||||
auto const [towels, designs] =
|
||||
aocpp::ParseSimple
|
||||
<tuple<vector<string>, vector<string>>>
|
||||
(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++; }
|
||||
p2 += n;
|
||||
}
|
||||
|
||||
out << "Part 1: " << p1 << "\n"
|
||||
<< "Part 2: " << p2 << "\n";
|
||||
}
|
@ -4,5 +4,8 @@ target_link_libraries(2024_01 aocpp Boost::headers)
|
||||
add_executable(2024_07 07.cpp)
|
||||
target_link_libraries(2024_07 aocpp Boost::headers)
|
||||
|
||||
add_executable(2024_19 19.cpp)
|
||||
target_link_libraries(2024_19 aocpp Boost::headers)
|
||||
|
||||
add_executable(2024_22 22.cpp)
|
||||
target_link_libraries(2024_22 aocpp)
|
||||
|
Loading…
Reference in New Issue
Block a user