Compare commits
4 commits
ca6047c747
...
bebfa59762
| Author | SHA1 | Date | |
|---|---|---|---|
| bebfa59762 | |||
| 8bf07308ff | |||
| 383dfa9e7a | |||
| 5cc189cde0 |
3 changed files with 4 additions and 43 deletions
|
|
@ -114,5 +114,5 @@ for i in [str(n).zfill(2) for n in range(1, 26)]:
|
||||||
pass
|
pass
|
||||||
if not day_no:
|
if not day_no:
|
||||||
print(f"\nStars: {stars}")
|
print(f"\nStars: {stars}")
|
||||||
print("".join("*" if n < stars else "•" for n in range(24)))
|
print("".join("*" if n < stars else "•" for n in range(50)))
|
||||||
print("")
|
print("")
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ DDa = {
|
||||||
ADJ = [
|
ADJ = [
|
||||||
(-1, -1),
|
(-1, -1),
|
||||||
(-1, 0),
|
(-1, 0),
|
||||||
(-1, 1),
|
(1, -1),
|
||||||
(0, -1),
|
(0, -1),
|
||||||
(0, 1),
|
(0, 1),
|
||||||
(1, 1),
|
(1, 1),
|
||||||
|
|
@ -60,12 +60,6 @@ def mhd(a, b):
|
||||||
return abs(ar - br) + abs(ac - bc)
|
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):
|
def matrix(d):
|
||||||
"""Transform a string into an iterable matrix. Returns the matrix, row count and col count"""
|
"""Transform a string into an iterable matrix. Returns the matrix, row count and col count"""
|
||||||
m = [tuple(r) for r in d.split()]
|
m = [tuple(r) for r in d.split()]
|
||||||
|
|
@ -78,12 +72,10 @@ def mdbg(m):
|
||||||
print("".join(r))
|
print("".join(r))
|
||||||
|
|
||||||
|
|
||||||
def vdbg(seen, h, w, C="#", M=None):
|
def vdbg(seen, h, w):
|
||||||
"""Print-debug visited positions of a matrix"""
|
"""Print-debug visited positions of a matrix"""
|
||||||
def _m(r, c):
|
|
||||||
return M[r][c] if M else "."
|
|
||||||
for r in range(h):
|
for r in range(h):
|
||||||
print("".join([C if (r, c) in seen else _m(r, c) for c in range(w)]))
|
print("".join(["#" if (r, c) in seen else " " for c in range(w)]))
|
||||||
|
|
||||||
|
|
||||||
def vvdbg(seen, h, w):
|
def vvdbg(seen, h, w):
|
||||||
|
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
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