From 85e491d76f1eabe8117c25ab43da3ada73b34442 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Mon, 11 Dec 2023 21:23:41 +0100 Subject: cleanup code --- src/day11.cpp | 87 +++++++++++++++-------------------------------------------- 1 file changed, 21 insertions(+), 66 deletions(-) diff --git a/src/day11.cpp b/src/day11.cpp index baa1d9e..e1a0882 100644 --- a/src/day11.cpp +++ b/src/day11.cpp @@ -19,36 +19,6 @@ read_file(string_view filename) return data; } -vector -expand(const vector& input) -{ - vector result; - - for ( const auto& line: input ) { - if ( line.find('#') == line.npos ) { - result.emplace_back(line); - } - result.emplace_back(line); - } - - for ( size_t col = 0; col != result[0].size(); ++col ) { - bool empty_col = true; - for ( const auto& line: result ) { - if ( line[col] == '#' ) { - empty_col = false; - } - } - if ( empty_col ) { - for ( auto& line: result ) { - line.insert(col, 1, '.'); - } - ++col; - } - } - - return result; -} - vector> find_points(const vector& input) { @@ -68,33 +38,8 @@ find_points(const vector& input) } void -solve(const vector>& points) +find_empty_rows_and_cols(const vector& input, set& cols, set& rows) { - long sum = 0; - for ( size_t i = 0; i != points.size(); ++i ) { - for ( size_t j = i + 1; j != points.size(); ++j ) { - const auto& from = points[i]; - const auto& to = points[j]; - - sum += abs(get<0>(from) - get<0>(to)) + abs(get<1>(from) - get<1>(to)); - } - } - cout << sum << endl; - -} - -void -part1() -{ - solve(find_points(expand(read_file("data/day11.txt")))); -} - -void -find_empty_rows_ans_cols(const vector& input, set& cols, set& rows) -{ - cols.clear(); - rows.clear(); - for ( size_t row = 0; row != input.size(); ++row ) { const auto& line = input[row]; if ( line.find('#') == line.npos ) { @@ -115,31 +60,41 @@ find_empty_rows_ans_cols(const vector& input, set& cols, set } } -void -part2() +long +solve(const vector& input, long scale) { - auto input = read_file("data/day11.txt"); auto points = find_points(input); set cols; set rows; - find_empty_rows_ans_cols(input, cols, rows); + find_empty_rows_and_cols(input, cols, rows); - auto scale = 1000000 - 1; for ( auto& point: points ) { - const auto row = get<0>(point) + count_if(rows.begin(), rows.end(), [&](long row) { return row < get<0>(point); }) * scale; - const auto col = get<1>(point) + count_if(cols.begin(), cols.end(), [&](long col) { return col < get<1>(point); }) * scale; + const auto row = get<0>(point) + count_if(rows.begin(), rows.end(), [&](long row) { return row < get<0>(point); }) * (scale - 1); + const auto col = get<1>(point) + count_if(cols.begin(), cols.end(), [&](long col) { return col < get<1>(point); }) * (scale - 1); point = { row, col }; } - solve(points); + auto sum = 0L; + for ( size_t i = 0; i != points.size(); ++i ) { + for ( size_t j = i + 1; j != points.size(); ++j ) { + const auto& from = points[i]; + const auto& to = points[j]; + + sum += abs(get<0>(from) - get<0>(to)) + abs(get<1>(from) - get<1>(to)); + } + } + + return sum; } int main() { - part1(); - part2(); + const auto input = read_file("data/day11.txt"); + + cout << "Part1: " << solve(input, 2) << endl; + cout << "Part2: " << solve(input, 1000000) << endl; } -- cgit v1.3