#!/usr/bin/env python from collections import defaultdict def read_input(filename): with open(filename) as f: for line in f: line = line.strip() yield line def find_xmas(data, posX, posY): if data[posX][posY] != 'A': return 0 tmp1 = data[posX-1][posY-1] + data[posX][posY] + data[posX+1][posY+1] tmp2 = data[posX+1][posY-1] + data[posX][posY] + data[posX-1][posY+1] if not tmp1 in ['MAS', 'SAM']: return 0 if not tmp2 in ['MAS', 'SAM']: return 0 return 1 def main(args): puzzle = defaultdict(lambda: defaultdict(lambda: ".")) for id1, line in enumerate(read_input(args.file)): for id2, char in enumerate(list(line)): puzzle[id1][id2] = char count = 0 for posX in range(len(puzzle)): for posY in range(len(puzzle[posX])): if puzzle[posX][posY] != 'A': continue count += find_xmas(puzzle, posX, posY) print(count) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser( prog='AdventOfCode 2024, Day 04, part 1', ) parser.add_argument('-f', '--file', required=True) args = parser.parse_args() main(args)