From e0879b1fc2608befa6eee4dd8c2a82ade94e94ce Mon Sep 17 00:00:00 2001 From: Orfeas <38209077+0xfea5@users.noreply.github.com> Date: Wed, 27 Aug 2025 04:18:43 +0300 Subject: day01/: rewrite solution to be in line with the template --- day01/Makefile | 14 +------------ day01/solution.cpp | 53 ++++++++++++++++++++++++++++++++---------------- day01/tests/test1.input | 6 ++++++ day01/tests/test1.output | 2 ++ 4 files changed, 44 insertions(+), 31 deletions(-) create mode 100644 day01/tests/test1.input create mode 100644 day01/tests/test1.output diff --git a/day01/Makefile b/day01/Makefile index c1bc66d..2fa98c0 100644 --- a/day01/Makefile +++ b/day01/Makefile @@ -1,13 +1 @@ -CXX := g++ -CXX_FLAGS := -std=c++23 -SOLUTION := solution.cpp -INPUT := input.txt -TARGET := solution.out - -all: compile run - -compile: - ${CXX} ${CXX_FLAGS} ${SOLUTION} -o ${TARGET} - -run: compile - ./${TARGET} < ${INPUT} +include ../aoc.mk diff --git a/day01/solution.cpp b/day01/solution.cpp index b19504e..78535a3 100644 --- a/day01/solution.cpp +++ b/day01/solution.cpp @@ -4,10 +4,28 @@ #include #include #include +#include +#include +#include + +namespace ranges = std::ranges; -void part1(std::vector A, std::vector B) { - std::sort(A.begin(), A.end()); - std::sort(B.begin(), B.end()); +const auto parse_input() { + std::pair, std::vector> result; + + for (int a, b; std::cin >> a >> b;) { + result.first.push_back(a); + result.second.push_back(b); + } + + return result; +} + +void part1(auto input) { + auto &[A, B] = input; + + ranges::sort(A); + ranges::sort(B); int sum = 0; for (auto [x, y] : std::views::zip(A, B)) { @@ -17,35 +35,34 @@ void part1(std::vector A, std::vector B) { std::println("{}", sum); } -void part2(std::vector A, std::vector B) { - std::map _A, _B; +void part2(auto input) { + auto &[A, B] = input; + std::map freq_A, freq_B; for (auto a : A) { - _A[a]++; + freq_A[a]++; } for (auto b : B) { - _B[b]++; + freq_B[b]++; } int sum = 0; - for (auto a : _A) { - sum += a.first * a.second * _B[a.first]; + for (auto a : freq_A) { + sum += a.first * a.second * freq_B[a.first]; } std::println("{}", sum); } int main() { - std::vector A, B; - - int a, b; - while (std::cin >> a >> b) { - A.push_back(a); - B.push_back(b); - } + const auto input = parse_input(); - part1(A, B); - part2(A, B); +#ifndef NO_PART1 + part1(input); +#endif +#ifndef NO_PART2 + part2(input); +#endif return 0; } diff --git a/day01/tests/test1.input b/day01/tests/test1.input new file mode 100644 index 0000000..b8af9ad --- /dev/null +++ b/day01/tests/test1.input @@ -0,0 +1,6 @@ +3 4 +4 3 +2 5 +1 3 +3 9 +3 3 diff --git a/day01/tests/test1.output b/day01/tests/test1.output new file mode 100644 index 0000000..4cb4249 --- /dev/null +++ b/day01/tests/test1.output @@ -0,0 +1,2 @@ +11 +31 -- cgit v1.2.3