From e308ad6691abd5be82e9a2b8819d0ec1549f96de Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sun, 1 Dec 2024 08:20:37 +0100 Subject: aoc 2024, day1 --- 2024/src/day01.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 2024/src/day01.cpp (limited to '2024/src') diff --git a/2024/src/day01.cpp b/2024/src/day01.cpp new file mode 100644 index 0000000..61b3c29 --- /dev/null +++ b/2024/src/day01.cpp @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +vector> +read_file(string_view filename) +{ + fstream input{ filename }; + vector> data; + + long lhs = 0; + long rhs = 0; + + while ( input >> lhs >> rhs ) { + data.emplace_back(lhs, rhs); + } + + return data; +} + +void +part1(const vector>& data) +{ + vector lefts; + vector rights; + + for ( const auto& [lhs, rhs]: data ) { + lefts.emplace_back(lhs); + rights.emplace_back(rhs); + } + + sort(lefts.begin(), lefts.end()); + sort(rights.begin(), rights.end()); + + long total_distance = 0; + for ( size_t i = 0; i != lefts.size(); ++i ) { + long distance = abs(lefts[i] - rights[i]); + total_distance += distance; + } + cout << total_distance << endl; +} + +void +part2(const vector>& data) +{ + vector lefts; + map rights; + + for ( const auto& [lhs, rhs]: data ) { + lefts.emplace_back(lhs); + rights[rhs]++; + } + + long score = 0; + for ( const auto& lhs: lefts ) { + score += lhs * rights[lhs]; + } + cout << score << endl; +} + +int +main() +{ + auto data = read_file("data/day01.txt"); + part1(data); + part2(data); +} -- cgit v1.3