@@ -0,0 +1,24 @@ | |||
text = open(0).read() | |||
state = {} | |||
for y, row in enumerate(text.splitlines()): | |||
for x, ch in enumerate(row): | |||
state[x, y] = ch | |||
X, Y = x + 1, y + 1 | |||
seen = set() | |||
for turn in range(1000): | |||
for ch, dx, dy in [('>', 1, 0), ('v', 0, 1)]: | |||
copy = state.copy() | |||
for old in copy: | |||
if copy[old] == ch: | |||
x, y = old | |||
new = (x + dx) % X, (y + dy) % Y | |||
if copy[new] == '.': | |||
state[old] = '.' | |||
state[new] = ch | |||
hashable = frozenset(state.items()) | |||
if hashable in seen: | |||
print(turn) | |||
break | |||
seen.add(hashable) |