3
3
from GhostyUtils .vec2 import Dir , Vec2
4
4
5
5
6
- search_dirs = [
6
+ xmas_dirs = [
7
7
Dir .EAST ,
8
8
Dir .SOUTH_EAST ,
9
9
Dir .SOUTH ,
17
17
18
18
def search_xmas (grid : Grid , pos : Vec2 ) -> int :
19
19
xmas_count = 0
20
- for dir_ in search_dirs :
20
+ for dir_ in xmas_dirs :
21
21
word = [grid [pos + dir_ .as_vec2 () * i ]
22
22
for i in range (4 ) if grid .in_bounds (pos + dir_ .as_vec2 () * i )]
23
23
if word == list ('XMAS' ):
@@ -26,6 +26,14 @@ def search_xmas(grid: Grid, pos: Vec2) -> int:
26
26
return xmas_count
27
27
28
28
29
+ def search_masx (grid : Grid , pos : Vec2 ) -> int :
30
+ one = sorted ([grid [pos + Dir .NORTH_EAST ], grid [pos + Dir .SOUTH_WEST ]])
31
+ two = sorted ([grid [pos + Dir .NORTH_WEST ], grid [pos + Dir .SOUTH_EAST ]])
32
+ if one == two == list ('MS' ):
33
+ return 1
34
+ return 0
35
+
36
+
29
37
def main ():
30
38
grid = Grid (aoc .read_lines ())
31
39
@@ -38,6 +46,21 @@ def main():
38
46
continue
39
47
print ("p1:" , xmas_count )
40
48
49
+ masx_count = 0
50
+ for y , row in enumerate (grid ):
51
+ # skip the top and bottom rows
52
+ if y in [0 , grid .height () - 1 ]:
53
+ continue
54
+ for x , cell in enumerate (row ):
55
+ # skip the left and right columns
56
+ if x in [0 , grid .width () - 1 ]:
57
+ continue
58
+ if cell == 'A' :
59
+ masx_count += search_masx (grid , Vec2 (x , y ))
60
+ else :
61
+ continue
62
+ print ("p2:" , masx_count )
63
+
41
64
42
65
if __name__ == "__main__" :
43
66
main ()
0 commit comments