From 85f5de1be29f3e4d21d9bcfc6a48855a12effb5f Mon Sep 17 00:00:00 2001 From: Thraix Date: Mon, 31 Aug 2026 22:21:13 +0200 Subject: [PATCH] Add solution for 2016 Day 19 --- res/2016/day19/test_input.txt | 1 + src/2016/Day19.cpp | 64 ++++++++++++++++++++++++++++------- src/common/lib/Helper.h | 10 ++++++ 3 files changed, 62 insertions(+), 13 deletions(-) diff --git a/res/2016/day19/test_input.txt b/res/2016/day19/test_input.txt index e69de29..7ed6ff8 100644 --- a/res/2016/day19/test_input.txt +++ b/res/2016/day19/test_input.txt @@ -0,0 +1 @@ +5 diff --git a/src/2016/Day19.cpp b/src/2016/Day19.cpp index 6cd7d68..8d9a37c 100644 --- a/src/2016/Day19.cpp +++ b/src/2016/Day19.cpp @@ -2,30 +2,68 @@ namespace y2016::day19 { - REGISTER_DAY(2016, Day19, std::vector, int); + REGISTER_DAY(2016, Day19, int, int); - REGISTER_TEST_EXAMPLE(2016, Day19, ExampleInput, 1, 0); - REGISTER_TEST(2016, Day19, Input, 1, 0); - REGISTER_TEST_EXAMPLE(2016, Day19, ExampleInput, 2, 0); - REGISTER_TEST(2016, Day19, Input, 2, 0); + REGISTER_TEST_EXAMPLE(2016, Day19, ExampleInput, 1, 3); + REGISTER_TEST(2016, Day19, Input, 1, 1842613); + REGISTER_TEST_EXAMPLE(2016, Day19, ExampleInput, 2, 2); + REGISTER_TEST(2016, Day19, Input, 2, 1424135); READ_INPUT(input) { - std::vector vec; - std::string str; - while (getline(input, str)) - { - } - return vec; + int i; + input >> i; + return i; } OUTPUT1(input) { - return 0; + std::vector elves(input, 0); + for (int i = 0; i < input; i++) + { + elves[i] = i + 1; + } + int offset = 0; + while (elves.size() > 1) + { + std::vector newElves; + for (int i = offset; i < elves.size(); i += 2) + { + newElves.emplace_back(elves[i]); + } + offset = (offset + (elves.size() % 2)) % 2; + elves = newElves; + } + return elves[0]; } OUTPUT2(input) { - return 0; + std::deque start; + std::deque end; + for (int i = 0; i < input / 2; i++) + { + start.push_back(i + 1); + } + for (int i = input / 2; i < input; i++) + { + end.push_back(i + 1); + } + + while (!start.empty()) + { + end.pop_front(); + + end.push_back(start.front()); + start.pop_front(); + + if (end.size() - start.size() == 2) + { + start.push_back(end.front()); + end.pop_front(); + } + } + + return end.front(); } } diff --git a/src/common/lib/Helper.h b/src/common/lib/Helper.h index ac090c9..6aeb4a1 100644 --- a/src/common/lib/Helper.h +++ b/src/common/lib/Helper.h @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -20,6 +21,9 @@ template static std::ostream& operator<<(std::ostream& stream, const std::vector& container); +template +static std::ostream& operator<<(std::ostream& stream, const std::deque& container); + template static std::ostream& operator<<(std::ostream& stream, const std::set& container); @@ -564,6 +568,12 @@ static std::ostream& operator<<(std::ostream& stream, const std::vector return Helper::Print(stream, container); } +template +static std::ostream& operator<<(std::ostream& stream, const std::deque& container) +{ + return Helper::Print(stream, container); +} + template static std::ostream& operator<<(std::ostream& stream, const std::set& container) {