Add solution for 2016 Day 18
This commit is contained in:
@@ -0,0 +1 @@
|
||||
.^^.^.^^^^
|
||||
|
||||
+36
-10
@@ -2,30 +2,56 @@
|
||||
|
||||
namespace y2016::day18
|
||||
{
|
||||
REGISTER_DAY(2016, Day18, std::vector<int>, 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<int> 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<char> 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<char> 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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user