1+ #!/usr/bin/env python
2+ # -*- coding: utf-8 -*-
3+
4+ split_data = True
5+ completed = True
6+ raw_data = None # Not To be touched
7+
8+ def part1 (data ):
9+ m , n = len (data ), len (data [0 ])
10+ # We look for x and then see if it forms any XMAS
11+ # print(f"{m}x{n} grid")
12+
13+ found = 0
14+
15+ movements = [(dx , dy ) for dx in range (- 1 , 2 ) for dy in range (- 1 , 2 ) if (dx , dy ) != (0 , 0 )]
16+
17+ for y , line in enumerate (data ):
18+ for x , char in enumerate (line ):
19+ if char != 'X' : continue
20+
21+ for dx , dy in movements :
22+ nx , ny = x , y
23+ for i in range (3 ):
24+ nx , ny = nx + dx , ny + dy
25+ if not (0 <= nx < n and 0 <= ny < m ): break
26+ if "MAS" [i ] != data [ny ][nx ]: break # Checking if the ith letter is part of XMAS
27+ else :
28+ found += 1
29+
30+ return found
31+
32+ def part2 (data ):
33+ m , n = len (data ), len (data [0 ])
34+
35+ found = 0
36+ for y , line in enumerate (data ):
37+ if not (1 <= y < m - 1 ): continue
38+ for x , char in enumerate (line ):
39+ if char != 'A' : continue
40+ if not (1 <= x < n - 1 ): continue
41+
42+ for dx , dy in [(1 , 1 ), (- 1 , 1 )]:
43+ if set (["M" , "S" ]) != set ([data [y + dy ][x + dx ], data [y - dy ][x - dx ]]):
44+ break
45+ else :
46+ found += 1
47+
48+ return found
49+
0 commit comments