| 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) |