From 7b2567a71eaa729f6b604589f3f794fff7014e0d Mon Sep 17 00:00:00 2001 From: Thraix Date: Thu, 27 Aug 2026 21:41:22 +0200 Subject: [PATCH] Add solution for 2016 Day 16 --- res/2016/day16/test_input.txt | 1 + src/2016/Day16.cpp | 47 +++++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/res/2016/day16/test_input.txt b/res/2016/day16/test_input.txt index e69de29..5caff40 100644 --- a/res/2016/day16/test_input.txt +++ b/res/2016/day16/test_input.txt @@ -0,0 +1 @@ +10000 diff --git a/src/2016/Day16.cpp b/src/2016/Day16.cpp index d957b41..07b589e 100644 --- a/src/2016/Day16.cpp +++ b/src/2016/Day16.cpp @@ -2,30 +2,57 @@ namespace y2016::day16 { - REGISTER_DAY(2016, Day16, std::vector, int); + REGISTER_DAY(2016, Day16, std::string, std::string); - REGISTER_TEST_EXAMPLE(2016, Day16, ExampleInput, 1, 0); - REGISTER_TEST(2016, Day16, Input, 1, 0); - REGISTER_TEST_EXAMPLE(2016, Day16, ExampleInput, 2, 0); - REGISTER_TEST(2016, Day16, Input, 2, 0); + REGISTER_TEST_EXAMPLE(2016, Day16, ExampleInput, 1, "01100"); + REGISTER_TEST(2016, Day16, Input, 1, "10100011010101011"); + REGISTER_TEST(2016, Day16, Input, 2, "01010001101011001"); READ_INPUT(input) { - std::vector vec; std::string str; - while (getline(input, str)) + getline(input, str); + return str; + } + + std::string ReverseFlip(const std::string& str) + { + std::string reverse; + for (int i = str.size() - 1; i >= 0; i--) { + reverse.push_back(str[i] == '1' ? '0' : '1'); } - return vec; + return reverse; + } + + std::string Solve(std::string str, int length) + { + while (str.size() < length) + { + str = str + "0" + ReverseFlip(str); + } + str = str.substr(0, length); + + std::string checksum; + while (str.size() % 2 == 0) + { + for (int i = 0; i < str.size(); i += 2) + { + checksum.push_back(str[i] == str[i + 1] ? '1' : '0'); + } + str = checksum; + checksum.clear(); + } + return str; } OUTPUT1(input) { - return 0; + return Solve(input, isExample ? 20 : 272); } OUTPUT2(input) { - return 0; + return Solve(input, 35651584); } }