9-2
This commit is contained in:
@@ -0,0 +1,44 @@
|
|||||||
|
seen = set()
|
||||||
|
front = (0,0)
|
||||||
|
tail = (0,0)
|
||||||
|
|
||||||
|
snek = [(0,0) for _ in range(10)]
|
||||||
|
|
||||||
|
direction = {
|
||||||
|
"R": (1, 0),
|
||||||
|
"L": (-1, 0),
|
||||||
|
"U": (0, 1),
|
||||||
|
"D": (0, -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
def move(back, front):
|
||||||
|
new = (0, 0)
|
||||||
|
if back[0] == front[0] and abs(back[1] - front[1]) > 1:
|
||||||
|
# Vertical move
|
||||||
|
new = (back[0], int((back[1] + front[1]) / 2))
|
||||||
|
elif back[1] == front[1] and abs(back[0] - front[0]) > 1:
|
||||||
|
new = (int((back[0] + front[0]) / 2), back[1])
|
||||||
|
elif abs(back[0] - front[0]) <= 1 and abs(back[1] - front[1]) <= 1:
|
||||||
|
# Touching diagonal, no action required
|
||||||
|
new = back
|
||||||
|
else:
|
||||||
|
# Non-touching diagonal, step required
|
||||||
|
dir = (min(1, max(-1, front[0] - back[0])), min(1, max(-1, front[1] - back[1])))
|
||||||
|
new = (back[0] + dir[0], back[1] + dir[1])
|
||||||
|
return new
|
||||||
|
|
||||||
|
def moveSnek():
|
||||||
|
for i in range(1, 10):
|
||||||
|
snek[i] = move(snek[i], snek[i-1])
|
||||||
|
|
||||||
|
|
||||||
|
with open("input.txt", "r") as f:
|
||||||
|
seen.add(snek[9])
|
||||||
|
for line in f.readlines():
|
||||||
|
line = line.strip()
|
||||||
|
[dir, steps] = line.split(" ")
|
||||||
|
for _ in range(int(steps)):
|
||||||
|
snek[0] = (snek[0][0] + direction[dir][0], snek[0][1] + direction[dir][1])
|
||||||
|
moveSnek()
|
||||||
|
seen.add(snek[9])
|
||||||
|
print(len(seen))
|
||||||
Reference in New Issue
Block a user