From 827acfa3ef141939665fafab8019153519ddd9fb Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sat, 9 Dec 2023 11:36:07 +0100 Subject: Clean up --- src/day09.cpp | 49 +++++++++++++++++-------------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/day09.cpp b/src/day09.cpp index 1afcfe2..1e9bde5 100644 --- a/src/day09.cpp +++ b/src/day09.cpp @@ -27,25 +27,21 @@ read_ints(const string& line) } template -void -solve_rec_part1(vector& values) +T +solve_rec_part1(const vector& values) { vector differences; for ( size_t idx = 1; idx < values.size(); ++idx ) { - auto difference = values[idx] - values[idx - 1]; - differences.emplace_back(difference); + differences.emplace_back(values[idx] - values[idx - 1]); } - auto all_zeros = all_of(differences.begin(), differences.end(), [](long diff) { return diff == 0; }); - if ( !all_zeros) { - solve_rec_part1(differences); + auto all_zeros = all_of(differences.begin(), differences.end(), [](T diff) { return diff == 0; }); + if ( !all_zeros ) { + return solve_rec_part1(differences) + values.back(); } else { - differences.emplace_back(0); + return values.back(); } - auto last_value = values.back(); - auto last_difference = differences.back(); - values.emplace_back(last_value + last_difference); } void @@ -55,46 +51,35 @@ part1() long sum = 0; for ( const auto& line: lines ) { - auto values = read_ints(line); - solve_rec_part1(values); - sum += values.back(); + sum += solve_rec_part1(read_ints(line)); } cout << sum << endl; } template -void -solve_rec_part2(vector& values) +T +solve_rec_part2(const vector& values) { vector differences; for ( size_t idx = 1; idx < values.size(); ++idx ) { - auto difference = values[idx] - values[idx - 1]; - differences.emplace_back(difference); + differences.emplace_back(values[idx] - values[idx - 1]); } - auto all_zeros = all_of(differences.begin(), differences.end(), [](long diff) { return diff == 0; }); - if ( !all_zeros) { - solve_rec_part2(differences); + auto all_zeros = all_of(differences.begin(), differences.end(), [](T diff) { return diff == 0; }); + if ( !all_zeros ) { + return values.front() - solve_rec_part2(differences); } else { - differences.insert(differences.begin(), 0); + return values.front(); } - - auto first_value = values.front(); - auto first_difference = differences.front(); - values.insert(values.begin(), first_value - first_difference); } void part2() { - auto lines = read_file("data/day09.txt"); - long sum = 0; - for ( const auto& line: lines ) { - auto values = read_ints(line); - solve_rec_part2(values); - sum += values.front(); + for ( const auto& line: read_file("data/day09.txt") ) { + sum += solve_rec_part2(read_ints(line)); } cout << sum << endl; } -- cgit v1.3