62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
#include "common/aoc.h"
|
|
|
|
namespace y2016::day20
|
|
{
|
|
using Input = std::vector<std::pair<uint64_t, uint64_t>>;
|
|
REGISTER_DAY(2016, Day20, Input, uint32_t);
|
|
|
|
REGISTER_TEST_EXAMPLE(2016, Day20, ExampleInput, 1, 3);
|
|
REGISTER_TEST(2016, Day20, Input, 1, 19449262);
|
|
REGISTER_TEST_EXAMPLE(2016, Day20, ExampleInput, 2, 2);
|
|
REGISTER_TEST(2016, Day20, Input, 2, 119);
|
|
|
|
READ_INPUT(input)
|
|
{
|
|
std::vector<std::pair<uint64_t, uint64_t>> vec;
|
|
std::string str;
|
|
while (getline(input, str))
|
|
{
|
|
std::pair<uint32_t, uint32_t> pair;
|
|
std::stringstream ss{str};
|
|
ss >> pair.first >> "-" >> pair.second;
|
|
vec.emplace_back(pair);
|
|
}
|
|
std::sort(vec.begin(), vec.end());
|
|
return vec;
|
|
}
|
|
|
|
OUTPUT1(input)
|
|
{
|
|
if (input.front().first != 0)
|
|
return 0;
|
|
|
|
for (int i = 0; i < input.size(); i++)
|
|
{
|
|
if (input[i].second + 1 < input[i + 1].first)
|
|
return input[i].second + 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
OUTPUT2(input)
|
|
{
|
|
uint64_t allowed = input.front().first;
|
|
uint64_t currentMax = input.front().second;
|
|
for (int i = 1; i < input.size(); i++)
|
|
{
|
|
if (currentMax < input[i].first - 1)
|
|
{
|
|
allowed += input[i].first - currentMax - 1;
|
|
currentMax = input[i].second;
|
|
}
|
|
else
|
|
{
|
|
currentMax = std::max(currentMax, input[i].second);
|
|
}
|
|
}
|
|
uint32_t max = isExample ? 9 : std::numeric_limits<uint32_t>::max();
|
|
allowed += max - currentMax;
|
|
return allowed;
|
|
}
|
|
}
|