Skip to content

Commit 61391a0

Browse files
committed
Completed day 4 of year 2024
1 parent 9abe027 commit 61391a0

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

2024/4.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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

Comments
 (0)