Add solution for 2016 Day 15
This commit is contained in:
1 parent
988c5552d0
commit
5111d633b7
3 files changed
+64
-16
No files matched your search
+35
-8
@@ -2,30 +2,57 @@
|
||||
|
||||
namespace y2016::day15
|
||||
{
|
||||
REGISTER_DAY(2016, Day15, std::vector<int>, int);
|
||||
struct Disc
|
||||
{
|
||||
int positions;
|
||||
int position;
|
||||
};
|
||||
|
||||
REGISTER_TEST_EXAMPLE(2016, Day15, ExampleInput, 1, 0);
|
||||
REGISTER_TEST(2016, Day15, Input, 1, 0);
|
||||
REGISTER_TEST_EXAMPLE(2016, Day15, ExampleInput, 2, 0);
|
||||
REGISTER_TEST(2016, Day15, Input, 2, 0);
|
||||
REGISTER_DAY(2016, Day15, std::vector<Disc>, int64_t);
|
||||
|
||||
REGISTER_TEST_EXAMPLE(2016, Day15, ExampleInput, 1, 25);
|
||||
REGISTER_TEST(2016, Day15, Input, 1, 400589);
|
||||
REGISTER_TEST_EXAMPLE(2016, Day15, ExampleInput, 2, 205);
|
||||
REGISTER_TEST(2016, Day15, Input, 2, 3045959);
|
||||
|
||||
READ_INPUT(input)
|
||||
{
|
||||
std::vector<int> vec;
|
||||
std::vector<Disc> vec;
|
||||
std::string str;
|
||||
while (getline(input, str))
|
||||
{
|
||||
std::stringstream ss{str};
|
||||
int i;
|
||||
Disc disc;
|
||||
ss >> "Disc #" >> i >> "has " >> disc.positions >> "positions; at time=" >> i >> ", it is at position " >>
|
||||
disc.position;
|
||||
vec.emplace_back(disc);
|
||||
}
|
||||
return vec;
|
||||
}
|
||||
|
||||
int64_t Solve(const std::vector<Disc>& discs)
|
||||
{
|
||||
std::vector<int64_t> starts;
|
||||
std::vector<int64_t> mods;
|
||||
std::vector<int64_t> remainders(discs.size(), 0);
|
||||
for (int j = 0; j < discs.size(); j++)
|
||||
{
|
||||
starts.emplace_back(discs[j].position + j + 1);
|
||||
mods.emplace_back(discs[j].positions);
|
||||
}
|
||||
return Helper::ChineseRemainderTheorem(mods, remainders, starts);
|
||||
}
|
||||
|
||||
OUTPUT1(input)
|
||||
{
|
||||
return 0;
|
||||
return Solve(input);
|
||||
}
|
||||
|
||||
OUTPUT2(input)
|
||||
{
|
||||
return 0;
|
||||
auto discs = input;
|
||||
discs.emplace_back(Disc{11, 0});
|
||||
return Solve(discs);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user