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