Slightly simplify solution for 2024 day 4

This commit is contained in:
SebastianStork 2024-12-17 11:34:42 +01:00
parent 713541b469
commit 354d114a8d

View file

@ -30,13 +30,11 @@ int xmasCountAt(const vector<string> &matrix, const size_t rowIndex, const size_
int xmasCount = 0; int xmasCount = 0;
// Horizontal check
if (colIndex + 3 < numberOfCols) { if (colIndex + 3 < numberOfCols) {
string horizontalWord = matrix[rowIndex].substr(colIndex, 4); string horizontalWord = matrix[rowIndex].substr(colIndex, 4);
xmasCount += wordIsXmas(horizontalWord); xmasCount += wordIsXmas(horizontalWord);
} }
// Vertical check
if (rowIndex + 3 < numberOfRows) { if (rowIndex + 3 < numberOfRows) {
string verticalWord; string verticalWord;
for (size_t i = 0; i <= 3; i++) { for (size_t i = 0; i <= 3; i++) {
@ -45,22 +43,13 @@ int xmasCountAt(const vector<string> &matrix, const size_t rowIndex, const size_
xmasCount += wordIsXmas(verticalWord); xmasCount += wordIsXmas(verticalWord);
} }
// Down-diagonal check
if (rowIndex + 3 < numberOfRows && colIndex + 3 < numberOfCols) { if (rowIndex + 3 < numberOfRows && colIndex + 3 < numberOfCols) {
string downDiagonalWord; string downDiagonalWord, upDiagonalWord;
for (size_t i = 0; i <= 3; i++) { for (size_t i = 0; i <= 3; i++) {
downDiagonalWord += matrix[rowIndex + i][colIndex + i]; downDiagonalWord += matrix[rowIndex + i][colIndex + i];
}
xmasCount += wordIsXmas(downDiagonalWord);
}
// Up-diagonal check
if (rowIndex + 3 < numberOfRows && colIndex + 3 < numberOfCols) {
string upDiagonalWord;
for (size_t i = 0; i <= 3; i++) {
upDiagonalWord += matrix[rowIndex + (3 - i)][colIndex + i]; upDiagonalWord += matrix[rowIndex + (3 - i)][colIndex + i];
} }
xmasCount += wordIsXmas(upDiagonalWord); xmasCount += wordIsXmas(downDiagonalWord) + wordIsXmas(upDiagonalWord);
} }
return xmasCount; return xmasCount;
@ -75,23 +64,13 @@ bool crossMasExistsAt(const vector<string> &matrix, const size_t rowIndex, const
return false; return false;
} }
string downDiagonalWord; string downDiagonalWord, upDiagonalWord;
for (size_t i = 0; i <= 2; i++) { for (size_t i = 0; i <= 2; i++) {
downDiagonalWord += matrix[rowIndex + i][colIndex + 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]; upDiagonalWord += matrix[rowIndex + (2 - i)][colIndex + i];
} }
if (!wordIsMas(upDiagonalWord)) {
return false;
}
return true; return wordIsMas(downDiagonalWord) && wordIsMas(upDiagonalWord);
} }
int main() int main()