diff --git a/2024/day04/part2.cc b/2024/day04/part2.cc new file mode 100644 index 0000000..557a9c8 --- /dev/null +++ b/2024/day04/part2.cc @@ -0,0 +1,35 @@ +#include +#include + +bool is_xmas(const char upper_left, const char upper_right, + const char center, const char lower_left, const char lower_right) { + if (center != 'A') { + return false; + } + return upper_left == 'M' && upper_right == 'M' && lower_left == 'S' && lower_right == 'S' + || upper_left == 'M' && upper_right == 'S' && lower_left == 'M' && lower_right == 'S' + || upper_left == 'S' && upper_right == 'M' && lower_left == 'S' && lower_right == 'M' + || upper_left == 'S' && upper_right == 'S' && lower_left == 'M' && lower_right == 'M'; +} + +int main() { + std::string line[3]; + int count = 0; + int line_number = 0; + while (std::getline(std::cin, line[++line_number % 3])) { + if (line_number < 3) { + continue; + } + for (int index = 1; index < line[(line_number - 1) % 3].size() - 1; index++) { + if (is_xmas( + line[(line_number - 2) % 3][index - 1], line[(line_number - 2) % 3][index + 1], + line[(line_number - 1) % 3][index], + line[line_number % 3][index - 1], line[line_number % 3][index + 1] + )) { + count++; + } + } + } + std::cout << count << std::endl; + return EXIT_SUCCESS; +}