import os import math input = open(os.path.dirname(__file__) + "/input.txt", "r").readlines() def dir(d): match d: case 'R': return (1, 0) case 'L': return (-1, 0) case 'U': return (0, 1) case 'D': return (0, -1) max = 10 tails = [] rope = [(0, 0) for i in range(max)] for l in input: moves = l.split() m = dir(moves[0]) for steps in range(int(moves[1])): rope[0] = [rope[0][0]+m[0], rope[0][1]+m[1]] for r in range(max-1): k, kn = rope[r:r+2] dx, dy = k[0]-kn[0], k[1] - kn[1] dist = abs(dx) + abs(dy) if dist == 2: if k[0] == kn[0]: rope[r+1] = (rope[r+1][0], rope[r+1][1]+dy//2) elif k[1] == kn[1]: rope[r+1] = (rope[r+1][0]+dx//2, rope[r+1][1]) elif dist == 3: if abs(dx) == 2: rope[r+1] = (rope[r+1][0]+dx//2, rope[r][1]) elif abs(dy) == 2: rope[r+1] = (rope[r][0], rope[r+1][1]+dy//2) elif dist == 4: rope[r+1] = (rope[r+1][0]+dx//2, rope[r+1][1]+dy//2) tails.append(rope[-1]) l = [] for i in tails: l.append(str(i[0])+","+str(i[1])) print(len(set(l)))