Move into 2022 folder

This commit is contained in:
Mark Hoekveen
2024-11-11 09:05:01 +01:00
parent 9dd6a4f275
commit e0d955ec6f
28 changed files with 5 additions and 11 deletions
+2000
View File
File diff suppressed because it is too large Load Diff
+41
View File
@@ -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))
+44
View File
@@ -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))