Initial commit with solutions from 2024

This commit is contained in:
Thraix
2025-11-26 21:59:50 +01:00
commit be113565fb
72 changed files with 7030 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
#include "common/aoc.h"
namespace 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;
}
}