Files
AdventOfCode/src/2016/Day01.cpp
T
2026-08-06 22:17:35 +02:00

74 lines
1.4 KiB
C++

#include "common/aoc.h"
namespace y2016::day01
{
struct Move
{
char r;
int count;
};
REGISTER_DAY(2016, Day01, std::vector<Move>, int);
REGISTER_TEST_EXAMPLE(2016, Day01, ExampleInput, 1, 8);
REGISTER_TEST(2016, Day01, Input, 1, 271);
REGISTER_TEST_EXAMPLE(2016, Day01, ExampleInput, 2, 4);
REGISTER_TEST(2016, Day01, Input, 2, 153);
READ_INPUT(input)
{
std::vector<Move> vec;
std::string str;
while (getline(input, str, ' '))
{
Move move;
move.r = str[0];
move.count = std::strtol(&str[1], nullptr, 10);
vec.emplace_back(move);
}
return vec;
}
OUTPUT1(input)
{
Index2D dir{1, 0};
Index2D pos{0, 0};
for (int i = 0; i < input.size(); i++)
{
if (input[i].r == 'R')
dir.RotateCW();
else
dir.RotateCCW();
pos = pos + dir * input[i].count;
}
return Helper::ManhattanDistance(pos, Index2D{0, 0});
}
OUTPUT2(input)
{
Index2D dir{1, 0};
Index2D pos{0, 0};
std::set<Index2D> visited;
visited.emplace(pos);
for (int i = 0; i < input.size(); i++)
{
if (input[i].r == 'R')
dir.RotateCW();
else
dir.RotateCCW();
for (int j = 0; j < input[i].count; j++)
{
pos = pos + dir;
if (visited.count(pos) != 0)
{
return Helper::ManhattanDistance(pos, Index2D{0, 0});
}
visited.emplace(pos);
}
}
return 0;
}
}