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/data/.gitkeep | 0 2024/src/day01.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ makefile | 9 +++++-- 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 2024/data/.gitkeep create mode 100644 2024/src/day01.cpp diff --git a/2024/data/.gitkeep b/2024/data/.gitkeep new file mode 100644 index 0000000..e69de29 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); +} diff --git a/makefile b/makefile index 0c313e7..8d9d8bc 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,8 @@ include config.mk all: $(patsubst 2015/src/%.cpp,2015/bin/%,$(wildcard 2015/src/*.cpp)) \ $(patsubst 2020/src/%.cpp,2020/bin/%,$(wildcard 2020/src/*.cpp)) \ $(patsubst 2022/src/%.cpp,2022/bin/%,$(wildcard 2022/src/*.cpp)) \ - $(patsubst 2023/src/%.cpp,2023/bin/%,$(wildcard 2023/src/*.cpp)) + $(patsubst 2023/src/%.cpp,2023/bin/%,$(wildcard 2023/src/*.cpp)) \ + $(patsubst 2024/src/%.cpp,2024/bin/%,$(wildcard 2024/src/*.cpp)) %/bin: mkdir -p $@ @@ -30,7 +31,11 @@ all: $(patsubst 2015/src/%.cpp,2015/bin/%,$(wildcard 2015/src/*.cpp)) \ 2023/bin/day24: 2023/src/day24.cpp | 2023/bin c++ $(CPPFLAGS) -Wno-sign-conversion -I/usr/local/include $^ -L/usr/local/lib -lz3 -o $@ +# 2024 +2024/bin/%: 2024/src/%.cpp | 2024/bin + c++ $(CPPFLAGS) $^ -o $@ + clean: - rm -rf 2015/bin 2020/bin 2022/bin 2023/bin + rm -rf 2015/bin 2020/bin 2022/bin 2023/bin 2024/bin .PHONY: all clean -- cgit v1.3