9-1
This commit is contained in:
+2000
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
|||||||
|
seen = set()
|
||||||
|
head = (0,0)
|
||||||
|
tail = (0,0)
|
||||||
|
|
||||||
|
direction = {
|
||||||
|
"R": (1, 0),
|
||||||
|
"L": (-1, 0),
|
||||||
|
"U": (0, 1),
|
||||||
|
"D": (0, -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
def moveTail():
|
||||||
|
global tail
|
||||||
|
print(f"Calcing move for tail {tail} towards {head}")
|
||||||
|
if tail[0] == head[0] and abs(tail[1] - head[1]) > 1:
|
||||||
|
# Vertical move
|
||||||
|
tail = (tail[0], int((tail[1] + head[1]) / 2))
|
||||||
|
elif tail[1] == head[1] and abs(tail[0] - head[0]) > 1:
|
||||||
|
tail = (int((tail[0] + head[0]) / 2), tail[1])
|
||||||
|
elif abs(tail[0] - head[0]) <= 1 and abs(tail[1] - head[1]) <= 1:
|
||||||
|
# Touching diagonal, no action required
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# Non-touching diagonal, step required
|
||||||
|
dir = (min(1, max(-1, head[0] - tail[0])), min(1, max(-1, head[1] - tail[1])))
|
||||||
|
print(f"Moving in {dir}")
|
||||||
|
tail = (tail[0] + dir[0], tail[1] + dir[1])
|
||||||
|
print(tail)
|
||||||
|
|
||||||
|
with open("input.txt", "r") as f:
|
||||||
|
for line in f.readlines():
|
||||||
|
line = line.strip()
|
||||||
|
[dir, steps] = line.split(" ")
|
||||||
|
for _ in range(int(steps)):
|
||||||
|
head = (head[0] + direction[dir][0], head[1] + direction[dir][1])
|
||||||
|
print(dir, head)
|
||||||
|
seen.add(tail)
|
||||||
|
moveTail()
|
||||||
|
seen.add(tail)
|
||||||
|
print(seen)
|
||||||
|
print(len(seen))
|
||||||
Reference in New Issue
Block a user