From 56e890cec0a28c0a485212ccebfaf774235a79a2 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Wed, 3 Jan 2024 23:35:54 +0100 Subject: prepare for more puzzles ... :) --- src/day11.cpp | 100 ---------------------------------------------------------- 1 file changed, 100 deletions(-) delete mode 100644 src/day11.cpp (limited to 'src/day11.cpp') diff --git a/src/day11.cpp b/src/day11.cpp deleted file mode 100644 index e1a0882..0000000 --- a/src/day11.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include -#include -#include -#include -#include -using namespace std; - -vector -read_file(string_view filename) -{ - fstream input{ filename }; - vector data; - - for ( string line; getline(input, line); ) { - data.emplace_back(line); - } - - return data; -} - -vector> -find_points(const vector& input) -{ - vector> result; - - for ( size_t row = 0; row != input.size(); ++row ) { - const auto& line = input[row]; - - for ( size_t col = 0; col != line.size(); ++col ) { - if ( line[col] == '#' ) { - result.emplace_back(long(row), long(col)); - } - } - } - - return result; -} - -void -find_empty_rows_and_cols(const vector& input, set& cols, set& rows) -{ - for ( size_t row = 0; row != input.size(); ++row ) { - const auto& line = input[row]; - if ( line.find('#') == line.npos ) { - rows.insert(long(row)); - } - } - - for ( size_t col = 0; col != input[0].size(); ++col ) { - bool empty_col = true; - for ( const auto& line: input ) { - if ( line[col] == '#' ) { - empty_col = false; - } - } - if ( empty_col ) { - cols.insert(long(col)); - } - } -} - -long -solve(const vector& input, long scale) -{ - auto points = find_points(input); - - set cols; - set rows; - - find_empty_rows_and_cols(input, cols, rows); - - for ( auto& point: points ) { - 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 }; - } - - 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() -{ - const auto input = read_file("data/day11.txt"); - - cout << "Part1: " << solve(input, 2) << endl; - cout << "Part2: " << solve(input, 1000000) << endl; -} -- cgit v1.3