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
+80
View File
@@ -0,0 +1,80 @@
#include "common/aoc.h"
namespace day22
{
REGISTER_DAY(2024, Day22, std::vector<int>, int64_t);
REGISTER_TEST_EXAMPLE(2024, Day22, ExampleInput, 1, 37990510);
REGISTER_TEST(2024, Day22, Input, 1, 14273043166);
REGISTER_TEST_EXAMPLE(2024, Day22, ExampleInput, 2, 23);
REGISTER_TEST(2024, Day22, Input, 2, 1667);
READ_INPUT(input)
{
return Input::ReadInts(input);
}
int64_t NextNumber(int64_t currentNum)
{
currentNum = ((currentNum * 64) ^ currentNum) % 16777216;
currentNum = ((currentNum / 32) ^ currentNum) % 16777216;
currentNum = ((currentNum * 2048) ^ currentNum) % 16777216;
return currentNum;
}
int GetDiffIndex(const std::vector<int>& vec)
{
int val = 0;
for (int i = vec.size() - 5; i < vec.size() - 1; i++)
{
val *= 19;
val += vec[i + 1] - vec[i] + 9;
}
return val;
}
OUTPUT1(input)
{
int64_t sum = 0;
for (auto num : input)
{
for (int i = 0; i < 2000; i++)
{
num = NextNumber(num);
}
sum += num;
}
return sum;
}
OUTPUT2(input)
{
const int MAX_INDEX = 19 * 19 * 19 * 19;
std::vector<int> monkeySequences(MAX_INDEX, 0);
int best = 0;
for (auto num : input)
{
std::vector<bool> alreadyFoundSequence(MAX_INDEX, false);
std::vector<int> sequence;
sequence.emplace_back(num % 10);
for (int i = 0; i < 2000; i++)
{
num = NextNumber(num);
sequence.emplace_back(num % 10);
if (sequence.size() >= 5)
{
int diffIndex = GetDiffIndex(sequence);
if (!alreadyFoundSequence[diffIndex])
{
alreadyFoundSequence[diffIndex] = true;
monkeySequences[diffIndex] += num % 10;
if (monkeySequences[diffIndex] > best)
best = monkeySequences[diffIndex];
}
}
}
}
return best;
}
}