From dc72a5b0095e6bea5f12cbd216a63ca33810c4a1 Mon Sep 17 00:00:00 2001 From: Mark Hoekveen Date: Mon, 30 Sep 2024 16:55:37 +0200 Subject: [PATCH] 9-2 --- 9/twostar.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 9/twostar.py diff --git a/9/twostar.py b/9/twostar.py new file mode 100644 index 0000000..80fe117 --- /dev/null +++ b/9/twostar.py @@ -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)) \ No newline at end of file