Solve 2022 day 9 pt 1-2
Pt 1 was just head and tail. For pt 2 I rewrote the
code to instead build the rope (snake) from head to
tail by always moving the head first and traverse
the body of the snake.
Yes, I think of it as a body of a snake - not knots
on a rope. Child hood memories are to damn colorful
:)
For reference, this is my visually debugging code:
def dbg(seen, snake):
print(snake)
for r in range(-4, 1):
print("".join([v(r, c, snake) for c in range(0, 7)]))
print("")
def v(r, c, snake):
if (r,c) == snake[0]:
return "H"
for i, n in enumerate(snake[1:-1], start=1):
if (r,c) == n:
return str(i)
if (r,c) == snake[-1]:
return "T"
if (r,c) == (0,0):
return "s"
return "."
This commit is contained in:
parent
179203f7be
commit
657fe956f9
1 changed files with 71 additions and 0 deletions
71
2022-python/output/day_09.py
Normal file
71
2022-python/output/day_09.py
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
from output import DD, ints
|
||||
|
||||
|
||||
def solve(data):
|
||||
p12 = []
|
||||
for sl in [2, 10]:
|
||||
seen = set([(0, 0)])
|
||||
snake = [(0, 0)] * sl
|
||||
for line in data.splitlines():
|
||||
d = line[0]
|
||||
for i in range(ints(line)[0]):
|
||||
ns = []
|
||||
hd, *tls = snake
|
||||
r, c = hd
|
||||
hd = r + DD[d][0], c + DD[d][1]
|
||||
ns.append(hd)
|
||||
for tl in tls:
|
||||
r, c = tl
|
||||
match (r - hd[0], c - hd[1]):
|
||||
case (2, -1):
|
||||
tl = r - 1, c + 1
|
||||
case (-2, -1):
|
||||
tl = r + 1, c + 1
|
||||
case (-2, 1):
|
||||
tl = r + 1, c - 1
|
||||
case (2, 1):
|
||||
tl = r - 1, c - 1
|
||||
case (1, 2):
|
||||
tl = r - 1, c - 1
|
||||
case (-1, 2):
|
||||
tl = r + 1, c - 1
|
||||
case (-1, -2):
|
||||
tl = r + 1, c + 1
|
||||
case (1, -2):
|
||||
tl = r - 1, c + 1
|
||||
case (0, 2):
|
||||
tl = r, c - 1
|
||||
case (0, -2):
|
||||
tl = r, c + 1
|
||||
case (2, 0):
|
||||
tl = r - 1, c
|
||||
case (-2, 0):
|
||||
tl = r + 1, c
|
||||
case (2, -2):
|
||||
tl = r - 1, c + 1
|
||||
case (-2, -2):
|
||||
tl = r + 1, c + 1
|
||||
case (-2, 2):
|
||||
tl = r + 1, c - 1
|
||||
case (2, 2):
|
||||
tl = r - 1, c - 1
|
||||
ns.append(tl)
|
||||
hd = tl
|
||||
snake = ns
|
||||
seen.add(tl)
|
||||
p12.append(len(seen))
|
||||
p1, p2 = p12
|
||||
return p1, p2
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open("./input/09.txt", "r") as f:
|
||||
inp = f.read().strip()
|
||||
|
||||
p1, p2 = solve(inp)
|
||||
|
||||
print(p1)
|
||||
print(p2)
|
||||
|
||||
assert p1 == 6212
|
||||
assert p2 == 2522
|
||||
Loading…
Add table
Reference in a new issue