Compare commits
6 commits
bebfa59762
...
ca6047c747
| Author | SHA1 | Date | |
|---|---|---|---|
| ca6047c747 | |||
| cf3a9298d3 | |||
| 57ada9e80f | |||
| 6fd5f20d34 | |||
| b87c6ed284 | |||
| d08fab4101 |
3 changed files with 43 additions and 4 deletions
|
|
@ -114,5 +114,5 @@ for i in [str(n).zfill(2) for n in range(1, 26)]:
|
|||
pass
|
||||
if not day_no:
|
||||
print(f"\nStars: {stars}")
|
||||
print("".join("*" if n < stars else "•" for n in range(50)))
|
||||
print("".join("*" if n < stars else "•" for n in range(24)))
|
||||
print("")
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ DDa = {
|
|||
ADJ = [
|
||||
(-1, -1),
|
||||
(-1, 0),
|
||||
(1, -1),
|
||||
(-1, 1),
|
||||
(0, -1),
|
||||
(0, 1),
|
||||
(1, 1),
|
||||
|
|
@ -60,6 +60,12 @@ def mhd(a, b):
|
|||
return abs(ar - br) + abs(ac - bc)
|
||||
|
||||
|
||||
def grid(d, o="#"):
|
||||
"""Transform a string into an iterable matrix. Returns the matrix, row count and col count"""
|
||||
m = [tuple(r) for r in d.split()]
|
||||
return set([(r, c) for c in range(len(m[0])) for r in range(len(m)) if m[r][c] == o])
|
||||
|
||||
|
||||
def matrix(d):
|
||||
"""Transform a string into an iterable matrix. Returns the matrix, row count and col count"""
|
||||
m = [tuple(r) for r in d.split()]
|
||||
|
|
@ -72,10 +78,12 @@ def mdbg(m):
|
|||
print("".join(r))
|
||||
|
||||
|
||||
def vdbg(seen, h, w):
|
||||
def vdbg(seen, h, w, C="#", M=None):
|
||||
"""Print-debug visited positions of a matrix"""
|
||||
def _m(r, c):
|
||||
return M[r][c] if M else "."
|
||||
for r in range(h):
|
||||
print("".join(["#" if (r, c) in seen else " " for c in range(w)]))
|
||||
print("".join([C if (r, c) in seen else _m(r, c) for c in range(w)]))
|
||||
|
||||
|
||||
def vvdbg(seen, h, w):
|
||||
|
|
|
|||
31
2025-python/output/day_04.py
Normal file
31
2025-python/output/day_04.py
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
from output import grid, ADJ
|
||||
|
||||
|
||||
def solve(data):
|
||||
p1 = 0
|
||||
p2 = set()
|
||||
G = grid(data, o="@")
|
||||
while True:
|
||||
for r, c in G:
|
||||
if sum((r + dy, c + dx) in G for dy, dx in ADJ) < 4:
|
||||
p2.add((r, c))
|
||||
if p1 == 0:
|
||||
p1 = len(p2)
|
||||
if not G & p2:
|
||||
break
|
||||
G = G - p2
|
||||
p2 = len(p2)
|
||||
return p1, p2
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open("./input/04.txt", "r") as f:
|
||||
inp = f.read().strip()
|
||||
|
||||
p1, p2 = solve(inp)
|
||||
|
||||
print(p1)
|
||||
print(p2)
|
||||
|
||||
assert p1 == 1493
|
||||
assert p2 == 9194
|
||||
Loading…
Add table
Reference in a new issue