def move(diff): dt = 0 if max(abs(diff.real), abs(diff.imag)) > 1: dt += diff.real and diff.real / abs(diff.real) dt += diff.imag and (diff.imag / abs(diff.imag)) * 1j return dt moves = dict(zip('LRUD', [-1, 1, -1j, 1j])) state = {i: 0 for i in range(10)} history = {i: set() for i in state} for instruction in open(0).read().splitlines(): k, v = instruction.split() for step in k * int(v): for i in state: state[i] += move(state[i - 1] - state[i]) if i else moves[k] history[i].add(state[i]) print(len(history[0])) print(len(history[9]))