Files
AdventOfCode/src/2024/Day04.cpp
T
2025-11-26 23:02:30 +01:00

77 lines
3.0 KiB
C++

#include "common/aoc.h"
namespace y2024::day04
{
REGISTER_DAY(2024, Day04, Array2D<char>, int32_t);
REGISTER_TEST_EXAMPLE(2024, Day04, ExampleInput, 1, 18);
REGISTER_TEST(2024, Day04, Input, 1, 2543);
REGISTER_TEST_EXAMPLE(2024, Day04, ExampleInput, 2, 9);
REGISTER_TEST(2024, Day04, Input, 2, 1930);
READ_INPUT(input)
{
return Input::ReadArray2D(input);
}
OUTPUT1(input)
{
int32_t sum = 0;
for (int y = 0; y < input.height; y++)
{
for (int x = 0; x < input.width; x++)
{
if (y < input.height - 3 && input.Get(x, y) == 'X' && input.Get(x, y + 1) == 'M' &&
input.Get(x, y + 2) == 'A' && input.Get(x, y + 3) == 'S')
sum++;
if (y < input.height - 3 && input.Get(x, y) == 'S' && input.Get(x, y + 1) == 'A' &&
input.Get(x, y + 2) == 'M' && input.Get(x, y + 3) == 'X')
sum++;
if (x < input.width - 3 && input.Get(x, y) == 'X' && input.Get(x + 1, y) == 'M' && input.Get(x + 2, y) == 'A' &&
input.Get(x + 3, y) == 'S')
sum++;
if (x < input.width - 3 && input.Get(x, y) == 'S' && input.Get(x + 1, y) == 'A' && input.Get(x + 2, y) == 'M' &&
input.Get(x + 3, y) == 'X')
sum++;
if (y < input.height - 3 && x < input.width - 3 && input.Get(x, y) == 'X' && input.Get(x + 1, y + 1) == 'M' &&
input.Get(x + 2, y + 2) == 'A' && input.Get(x + 3, y + 3) == 'S')
sum++;
if (y < input.height - 3 && x < input.width - 3 && input.Get(x, y) == 'S' && input.Get(x + 1, y + 1) == 'A' &&
input.Get(x + 2, y + 2) == 'M' && input.Get(x + 3, y + 3) == 'X')
sum++;
if (y < input.height - 3 && x < input.width - 3 && input.Get(x + 3, y) == 'X' &&
input.Get(x + 2, y + 1) == 'M' && input.Get(x + 1, y + 2) == 'A' && input.Get(x, y + 3) == 'S')
sum++;
if (y < input.height - 3 && x < input.width - 3 && input.Get(x + 3, y) == 'S' &&
input.Get(x + 2, y + 1) == 'A' && input.Get(x + 1, y + 2) == 'M' && input.Get(x, y + 3) == 'X')
sum++;
}
}
return sum;
}
OUTPUT2(input)
{
int32_t sum = 0;
for (int y = 0; y < input.height - 2; y++)
{
for (int x = 0; x < input.width - 2; x++)
{
if (input.Get(x, y) == 'M' && input.Get(x, y + 2) == 'M' && input.Get(x + 1, y + 1) == 'A' &&
input.Get(x + 2, y) == 'S' && input.Get(x + 2, y + 2) == 'S')
sum++;
if (input.Get(x, y) == 'M' && input.Get(x, y + 2) == 'S' && input.Get(x + 1, y + 1) == 'A' &&
input.Get(x + 2, y) == 'M' && input.Get(x + 2, y + 2) == 'S')
sum++;
if (input.Get(x, y) == 'S' && input.Get(x, y + 2) == 'M' && input.Get(x + 1, y + 1) == 'A' &&
input.Get(x + 2, y) == 'S' && input.Get(x + 2, y + 2) == 'M')
sum++;
if (input.Get(x, y) == 'S' && input.Get(x, y + 2) == 'S' && input.Get(x + 1, y + 1) == 'A' &&
input.Get(x + 2, y) == 'M' && input.Get(x + 2, y + 2) == 'M')
sum++;
}
}
return sum;
}
}