From 1092f82f162bbc6f55c47825512e0a45d67357ba Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Mon, 1 Dec 2025 21:57:43 +0100 Subject: aoc 2025, day 1, cleanup & optimized version for P2 --- 2025/src/day01.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/2025/src/day01.cpp b/2025/src/day01.cpp index aa1ea42..2650b3c 100644 --- a/2025/src/day01.cpp +++ b/2025/src/day01.cpp @@ -28,8 +28,7 @@ part1(const vector& lines) auto pos = 50; for ( const auto& line: lines ) { - auto value = stoi(line.substr(1)); - value %= 100; + const auto value = stoi(line.substr(1)) % 100; pos += (line[0] == 'L') ? (100 - value) : value; if ( pos % 100 == 0 ) { ++zeros; @@ -45,9 +44,9 @@ part2(const vector& lines) auto pos = 50; for ( const auto& line: lines ) { - auto value = stoi(line.substr(1)); - while ( value-- > 0 ) { - pos += (line[0] == 'L') ? 99 : 1; + const auto delta = (line[0] == 'L') ? 99 : 1; + for ( auto value = stoi(line.substr(1)); value > 0; --value ) { + pos += delta; if ( pos % 100 == 0 ) { ++zeros; } @@ -56,6 +55,43 @@ part2(const vector& lines) cout << "Part 2: " << zeros << '\n'; } +void +part2_opti(const vector& lines) +{ + auto zeros = 0; + auto pos = 50; + + auto is_zero = [&pos] { + return pos % 100 == 0; + }; + + for ( const auto& line: lines ) { + const auto delta = (line[0] == 'L') ? 99 : 1; + auto value = stoi(line.substr(1)); + + if ( !is_zero() ) { + for ( ; value > 0 && !is_zero(); --value ) { + pos += delta; + } + + if ( is_zero() ) { + ++zeros; + } + } + + zeros += value / 100; + value %= 100; + + for ( ; value > 0; --value ) { + pos += delta; + if ( is_zero() ) { + ++zeros; + } + } + } + cout << "Part2 (Opti): " << zeros << '\n'; +} + } // namespace int @@ -64,4 +100,5 @@ main() auto data = read_file("data/day01.txt"); part1(data); part2(data); + part2_opti(data); } -- cgit v1.3