From 8162a46091d9f187bddbbde3eb6cf7f40e5fa7dd Mon Sep 17 00:00:00 2001 From: Thraix Date: Mon, 31 Aug 2026 20:51:09 +0200 Subject: [PATCH] Add solution for 2016 Day 18 --- res/2016/day18/test_input.txt | 1 + src/2016/Day18.cpp | 46 +++++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/res/2016/day18/test_input.txt b/res/2016/day18/test_input.txt index e69de29..ff2880a 100644 --- a/res/2016/day18/test_input.txt +++ b/res/2016/day18/test_input.txt @@ -0,0 +1 @@ +.^^.^.^^^^ diff --git a/src/2016/Day18.cpp b/src/2016/Day18.cpp index 802a0ef..48695bb 100644 --- a/src/2016/Day18.cpp +++ b/src/2016/Day18.cpp @@ -2,30 +2,56 @@ namespace y2016::day18 { - REGISTER_DAY(2016, Day18, std::vector, int); + REGISTER_DAY(2016, Day18, std::string, int); - REGISTER_TEST_EXAMPLE(2016, Day18, ExampleInput, 1, 0); - REGISTER_TEST(2016, Day18, Input, 1, 0); - REGISTER_TEST_EXAMPLE(2016, Day18, ExampleInput, 2, 0); - REGISTER_TEST(2016, Day18, Input, 2, 0); + REGISTER_TEST_EXAMPLE(2016, Day18, ExampleInput, 1, 38); + REGISTER_TEST(2016, Day18, Input, 1, 1913); + REGISTER_TEST_EXAMPLE(2016, Day18, ExampleInput, 2, 1935478); + REGISTER_TEST(2016, Day18, Input, 2, 19993564); READ_INPUT(input) { - std::vector vec; std::string str; - while (getline(input, str)) + getline(input, str); + return str; + } + + int Solve(const std::string& str, int rows) + { + int safes = std::count(str.begin(), str.end(), '.'); + std::vector row(str.size() + 2, false); + for (int i = 0; i < str.size(); i++) + row[i + 1] = str[i] == '^'; + + for (int i = 1; i < rows; i++) { + std::vector newRow(row.size(), false); + for (int j = 1; j < newRow.size() - 1; j++) + { + bool isTrap = false; + if (row[j - 1] && row[j] && !row[j + 1]) + newRow[j] = true; + else if (!row[j - 1] && row[j] && row[j + 1]) + newRow[j] = true; + else if (row[j - 1] && !row[j] && !row[j + 1]) + newRow[j] = true; + else if (!row[j - 1] && !row[j] && row[j + 1]) + newRow[j] = true; + else + safes++; + } + row = newRow; } - return vec; + return safes; } OUTPUT1(input) { - return 0; + return Solve(input, isExample ? 10 : 40); } OUTPUT2(input) { - return 0; + return Solve(input, 400000); } }