Add solution for 2016 Day 18
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
.^^.^.^^^^
|
||||||
|
|||||||
+37
-11
@@ -2,30 +2,56 @@
|
|||||||
|
|
||||||
namespace y2016::day18
|
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_EXAMPLE(2016, Day18, ExampleInput, 1, 38);
|
||||||
REGISTER_TEST(2016, Day18, Input, 1, 0);
|
REGISTER_TEST(2016, Day18, Input, 1, 1913);
|
||||||
REGISTER_TEST_EXAMPLE(2016, Day18, ExampleInput, 2, 0);
|
REGISTER_TEST_EXAMPLE(2016, Day18, ExampleInput, 2, 1935478);
|
||||||
REGISTER_TEST(2016, Day18, Input, 2, 0);
|
REGISTER_TEST(2016, Day18, Input, 2, 19993564);
|
||||||
|
|
||||||
READ_INPUT(input)
|
READ_INPUT(input)
|
||||||
{
|
{
|
||||||
std::vector<int> vec;
|
|
||||||
std::string str;
|
std::string str;
|
||||||
while (getline(input, str))
|
getline(input, str);
|
||||||
{
|
return str;
|
||||||
}
|
}
|
||||||
return vec;
|
|
||||||
|
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 safes;
|
||||||
}
|
}
|
||||||
|
|
||||||
OUTPUT1(input)
|
OUTPUT1(input)
|
||||||
{
|
{
|
||||||
return 0;
|
return Solve(input, isExample ? 10 : 40);
|
||||||
}
|
}
|
||||||
|
|
||||||
OUTPUT2(input)
|
OUTPUT2(input)
|
||||||
{
|
{
|
||||||
return 0;
|
return Solve(input, 400000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user