#!/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()