mirror of
https://github.com/SebastianStork/advent-of-code.git
synced 2026-01-21 14:31:34 +01:00
Solve 2024 day 4 part 2
This commit is contained in:
parent
943db1881c
commit
713541b469
1 changed files with 38 additions and 0 deletions
|
|
@ -18,6 +18,11 @@ bool wordIsXmas(const string &word)
|
||||||
return word == "XMAS" || word == "SAMX";
|
return word == "XMAS" || word == "SAMX";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wordIsMas(const string &word)
|
||||||
|
{
|
||||||
|
return word == "MAS" || word == "SAM";
|
||||||
|
}
|
||||||
|
|
||||||
int xmasCountAt(const vector<string> &matrix, const size_t rowIndex, const size_t colIndex)
|
int xmasCountAt(const vector<string> &matrix, const size_t rowIndex, const size_t colIndex)
|
||||||
{
|
{
|
||||||
const size_t numberOfRows = matrix.size();
|
const size_t numberOfRows = matrix.size();
|
||||||
|
|
@ -61,6 +66,34 @@ int xmasCountAt(const vector<string> &matrix, const size_t rowIndex, const size_
|
||||||
return xmasCount;
|
return xmasCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool crossMasExistsAt(const vector<string> &matrix, const size_t rowIndex, const size_t colIndex)
|
||||||
|
{
|
||||||
|
const size_t numberOfRows = matrix.size();
|
||||||
|
const size_t numberOfCols = matrix[0].size();
|
||||||
|
|
||||||
|
if (rowIndex + 2 >= numberOfRows || colIndex + 2 >= numberOfCols) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
string downDiagonalWord;
|
||||||
|
for (size_t i = 0; i <= 2; i++) {
|
||||||
|
downDiagonalWord += matrix[rowIndex + i][colIndex + i];
|
||||||
|
}
|
||||||
|
if (!wordIsMas(downDiagonalWord)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
string upDiagonalWord;
|
||||||
|
for (size_t i = 0; i <= 2; i++) {
|
||||||
|
upDiagonalWord += matrix[rowIndex + (2 - i)][colIndex + i];
|
||||||
|
}
|
||||||
|
if (!wordIsMas(upDiagonalWord)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
const vector<string> matrix = readInput();
|
const vector<string> matrix = readInput();
|
||||||
|
|
@ -68,13 +101,18 @@ int main()
|
||||||
const size_t numberOfCols = matrix[0].size();
|
const size_t numberOfCols = matrix[0].size();
|
||||||
|
|
||||||
int numberOfXmasOccurrences = 0;
|
int numberOfXmasOccurrences = 0;
|
||||||
|
int numberOfCrossMasOccurrences = 0;
|
||||||
|
|
||||||
for (size_t rowIndex = 0; rowIndex < numberOfRows; rowIndex++) {
|
for (size_t rowIndex = 0; rowIndex < numberOfRows; rowIndex++) {
|
||||||
for (size_t colIndex = 0; colIndex < numberOfCols; colIndex++) {
|
for (size_t colIndex = 0; colIndex < numberOfCols; colIndex++) {
|
||||||
numberOfXmasOccurrences += xmasCountAt(matrix, rowIndex, colIndex);
|
numberOfXmasOccurrences += xmasCountAt(matrix, rowIndex, colIndex);
|
||||||
|
numberOfCrossMasOccurrences += crossMasExistsAt(matrix, rowIndex, colIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Part one
|
// Part one
|
||||||
cout << "Number of XMAS occurrences: " << numberOfXmasOccurrences << endl;
|
cout << "Number of XMAS occurrences: " << numberOfXmasOccurrences << endl;
|
||||||
|
|
||||||
|
// Part two
|
||||||
|
cout << "Number of X-MAS occurrences: " << numberOfCrossMasOccurrences << endl;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue