From 756f22d58bb198b8f34589c112e1003614ccdcd6 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sun, 2 Nov 2025 21:41:58 +0100 Subject: aoc 2017, days 1-20 --- 2017/src/day02.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 2017/src/day02.cpp (limited to '2017/src/day02.cpp') diff --git a/2017/src/day02.cpp b/2017/src/day02.cpp new file mode 100644 index 0000000..5f965bd --- /dev/null +++ b/2017/src/day02.cpp @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +namespace { + +vector> +read_file(const filesystem::path& filename) +{ + ifstream file{ filename }; + vector> grid; + + for ( string line; getline(file, line); ) { + stringstream strm{ line }; + + vector row; + + for ( int value{}; strm >> value; ) { + row.emplace_back(value); + } + + grid.emplace_back(row); + } + + return grid; +} + +void +part1(const vector>& grid) +{ + int checksum = 0; + for ( const auto& row: grid ) { + auto [min, max] = ranges::minmax_element(row); + checksum += *max - *min; + } + cout << "Part1: " << checksum << '\n'; +} + +void +part2(const vector>& grid) +{ + int checksum = 0; + for ( auto row: grid ) { + ranges::sort(row, ranges::greater()); + + for ( auto it = row.begin(); it != row.end(); ++it ) { + for ( auto it2 = next(it); it2 != row.end(); ++it2 ) { + if ( *it % *it2 == 0 ) { + checksum += *it / *it2; + } + } + } + } + cout << "Part2: " << checksum << '\n'; +} + +} // namespace + +int +main() +{ + auto grid = read_file("data/day02.txt"); + part1(grid); + part2(grid); +} -- cgit v1.3