Skip to content

Commit cc11631

Browse files
committed
Completed day 10 of year 2024
1 parent b638fe9 commit cc11631

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

2024/10.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
def parse(data):
5+
# Converting to a 2D int array!
6+
return [[int(x) for x in line] for line in data.split('\n')]
7+
8+
split_data = parse
9+
completed = True
10+
raw_data = None # Not To be touched
11+
12+
def part1(data):
13+
movement = [(0, 1), (0, -1), (1, 0), (-1, 0)]
14+
15+
def calc_score(y0, x0):
16+
seen = set()
17+
queue = [(x0, y0)]
18+
score = 0
19+
20+
while queue:
21+
x, y = queue.pop(0)
22+
23+
for dx, dy in movement:
24+
nx, ny = x + dx, y + dy
25+
if not (0 <= nx < len(data[0]) and 0 <= ny < len(data)): continue # Out of bounds
26+
if data[ny][nx] - data[y][x] != 1: continue # Min increase of 1
27+
if f"{nx},{ny}" in seen: continue # Avoid repeats
28+
29+
seen.add(f"{nx},{ny}")
30+
if data[ny][nx] == 9:
31+
score += 1
32+
else:
33+
queue.append((nx, ny))
34+
35+
return score
36+
37+
cum = 0
38+
for y, line in enumerate(data):
39+
for x, height in enumerate(line):
40+
if height != 0: continue
41+
cum += calc_score(y, x)
42+
43+
44+
return cum
45+
46+
def part2(data):
47+
movement = [(0, 1), (0, -1), (1, 0), (-1, 0)]
48+
49+
def calc_score(y0, x0):
50+
# Same stuff but removed the "seen" part!
51+
queue = [(x0, y0)]
52+
score = 0
53+
54+
while queue:
55+
x, y = queue.pop(0)
56+
57+
for dx, dy in movement:
58+
nx, ny = x + dx, y + dy
59+
if not (0 <= nx < len(data[0]) and 0 <= ny < len(data)): continue # Out of bounds
60+
if data[ny][nx] - data[y][x] != 1: continue # Min increase of 1
61+
if data[ny][nx] == 9:
62+
score += 1
63+
else:
64+
queue.append((nx, ny))
65+
66+
return score
67+
68+
cum = 0
69+
for y, line in enumerate(data):
70+
for x, height in enumerate(line):
71+
if height != 0: continue
72+
cum += calc_score(y, x)
73+
74+
75+
return cum

0 commit comments

Comments
 (0)