2024/day4/part1.py

35 lines
1.2 KiB
Python
Executable File

#!/usr/bin/env python
from collections.abc import Iterable
import regex as re
from common import parse
def transposed(
matrix: list[str],
) -> Iterable: # see https://docs.python.org/3/library/itertools.html for the base "transpose" function
return map(lambda x: "".join(x), zip(*matrix, strict=True))
def solve(input: list[str]) -> int:
diagonal = 0
horizontal = sum([len(re.findall(r"(XMAS|SAMX)", line, overlapped=True)) for line in input]) # Horizontal
vertical = sum([len(re.findall(r"(XMAS|SAMX)", line, overlapped=True)) for line in transposed(input)]) # Vertical
for y in range(len(input) - 3):
for x in range(len(input) - 3):
# print(y, x, "\\", "".join([input[y + i][x + i] for i in range(4)]))
diagonal += 1 if "".join([input[y + i][x + i] for i in range(4)]) in ["XMAS", "SAMX"] else 0
# print(y + 3, x, "/", "".join([input[y + 3 - i][x + i] for i in range(4)]))
diagonal += 1 if "".join([input[y + 3 - i][x + i] for i in range(4)]) in ["XMAS", "SAMX"] else 0
# print(diagonal, horizontal, vertical)
return diagonal + horizontal + vertical
def main():
print(solve(parse("input")))
if __name__ == "__main__":
main()