46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
![]() |
#!/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)
|