From 07af163dd48bf0a496694e71aebfcb86b9c7600e Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Wed, 3 Dec 2025 17:32:56 +0100 Subject: aoc 2025, day 3, part 2 --- 2025/src/day03.cpp | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to '2025/src/day03.cpp') diff --git a/2025/src/day03.cpp b/2025/src/day03.cpp index c131255..ebf5fd4 100644 --- a/2025/src/day03.cpp +++ b/2025/src/day03.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include using namespace std; @@ -28,16 +29,39 @@ read_file(const filesystem::path& filename) return lines; } +long +solve(const vector& line, int n) +{ + long value = 0; + auto start = line.begin(); + auto end = prev(line.end(), n); + + while ( n-- > 0 ) { + start = max_element(start, end++); + + value *= 10; + value += *start++; + } + return value; +} + +long +solve(const vector>& lines, int n) +{ + return accumulate(lines.begin(), lines.end(), 0L, + [&](auto sum, const auto& line) { return sum + solve(line, n); }); +} + void part1(const vector>& lines) { - long sum = 0; - for ( const auto& line: lines ) { - auto first = max_element(line.begin(), prev(line.end())); - auto second = max_element(next(first), line.end()); - sum += *first * 10 + *second; - } - cout << "Part 1: " << sum << '\n'; + cout << "Part 1: " << solve(lines, 2) << '\n'; +} + +void +part2(const vector>& lines) +{ + cout << "Part 2: " << solve(lines, 12) << '\n'; } } // namespace @@ -47,4 +71,5 @@ main() { auto lines = read_file("data/day03.txt"); part1(lines); + part2(lines); } -- cgit v1.3