2024 D2P1

This commit is contained in:
2025-11-03 08:02:18 +00:00
parent 6cf9a4e557
commit 37cb5f5735
5 changed files with 1073 additions and 7 deletions

1004
2024/2.txt

File diff suppressed because it is too large Load Diff

BIN
2024/aoc

Binary file not shown.

View File

@@ -2,7 +2,7 @@
#include "aoc.hpp"
#include "day1.hpp"
#include "day2.hpp"
int main(int argc, char** argv)
{

View File

@@ -86,12 +86,24 @@ public:
/// Access tokens for a given line (1-based)
const std::vector<FileFragment>& TokensForLine(int line) const
{
if (line < 1 || line > static_cast<int>(_tokens.size()))
if (line < 0 || line > static_cast<int>(_tokens.size()))
{
static const std::vector<FileFragment> empty;
return empty;
}
return _tokens[line - 1];
return _tokens[line];
}
// Access a chunk of tokens for a given line
// E.g. Iterate [1,2], [2,3], [3,4]
std::vector<std::vector<FileFragment>> ChunkView(int line, size_t n, size_t gap) {
std::vector<FileFragment> v = _tokens[line];
std::vector<std::vector<FileFragment>> chunks;
for (size_t i = 0; i < v.size() - 1; i += gap) {
chunks.emplace_back(v.begin() + i,
v.begin() + std::min(v.size(), i + n));
}
return chunks;
}
/// Iterate through all lines and their tokens

58
2024/day2.hpp Normal file
View File

@@ -0,0 +1,58 @@
#include "aoc.hpp"
class Day02 : public AOCDay
{
public:
Day02() {}
~Day02() {}
int Day() override {return 2;}
int PartOne(File& f) override
{
f.SplitBy(" ");
int result_bad = 0;
for (int i = 0; i < f.Lines().size(); i++)
{
bool lastDirection;
bool first = true;
for (const auto& tokenPair : f.ChunkView(i, 2, 1))
{
int token = std::atoi(tokenPair[0].Data.c_str());
int nextToken = std::atoi(tokenPair[1].Data.c_str());
int diff = token - nextToken;
bool direction = diff > 0;
if (first)
{
lastDirection = direction;
first = false;
}
if (std::abs(diff) > 3
|| token == nextToken
|| direction != lastDirection)
{
result_bad++;
break;
}
lastDirection = direction;
first = false;
}
}
int result = f.Lines().size() - result_bad;
return result;
}
int PartTwo(File&) override
{
}
};
ADD_AOC_DAY(Day02);