From 9b5ff1e0a080537bb54da0a51696979b44d99c50 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 11 Dec 2025 10:06:01 +0100 Subject: aoc 2025, day 11, part 2 --- 2025/src/day11.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/2025/src/day11.cpp b/2025/src/day11.cpp index 47440f9..1bf8d44 100644 --- a/2025/src/day11.cpp +++ b/2025/src/day11.cpp @@ -64,17 +64,41 @@ part1(const Graph& graph) } long count = 0; - for ( const auto& node: graph.at(src) ) { count += dfs(node); } - return cache[src] = count; }; cout << "Part 1: " << dfs("you") << '\n'; } +void +part2(const Graph& graph) +{ + map, long> cache; + + function dfs = [&](const string& src, bool dac_visited, bool fft_visited) { + if ( src == "out" ) { + return (dac_visited && fft_visited) ? 1L : 0L; + } + + const auto args = make_tuple(src, dac_visited, fft_visited); + + if ( cache.contains(args) ) { + return cache.at(args); + } + + long count = 0; + for ( const auto& node: graph.at(src) ) { + count += dfs(node, dac_visited || node == "dac", fft_visited || node == "fft"); + } + return cache[args] = count; + }; + + cout << "Part 2: " << dfs("svr", false, false) << '\n'; +} + } // namespace int @@ -82,4 +106,5 @@ main() { auto graph = read_file("data/day11.txt"); part1(graph); + part2(graph); } -- cgit v1.3