|
|
@@ -0,0 +1,44 @@ |
|
|
|
import re |
|
|
|
|
|
|
|
|
|
|
|
text = open(0).read() |
|
|
|
p1, p2 = text.split('\n\n') |
|
|
|
|
|
|
|
grid = {} |
|
|
|
for y, row in enumerate(p1.splitlines()): |
|
|
|
for x, cell in enumerate(row): |
|
|
|
if cell.strip(): |
|
|
|
grid[complex(x, y)] = cell |
|
|
|
|
|
|
|
|
|
|
|
def render(grid): |
|
|
|
xmin, *_, xmax = sorted(int(p.real) for p in grid) |
|
|
|
ymin, *_, ymax = sorted(int(p.imag) for p in grid) |
|
|
|
for y in range(ymin, ymax + 1): |
|
|
|
for x in range(xmin, xmax + 1): |
|
|
|
print(grid.get(complex(x, y), ' '), end='') |
|
|
|
print() |
|
|
|
|
|
|
|
|
|
|
|
pos = min(grid, key=lambda p: (p.real == 0, p.imag)) |
|
|
|
grid[pos] = '@' |
|
|
|
d = 1 |
|
|
|
for n, b in zip(map(int, re.sub(r'[A-Z]', ' ', p2).split()), re.sub(r'\d', ' ', p2).split()): |
|
|
|
for _ in range(n): |
|
|
|
if grid.get(pos + d) in set('.<v>^'): |
|
|
|
pos += d |
|
|
|
elif grid.get(pos + d) == '#': |
|
|
|
continue |
|
|
|
elif grid.get(pos + d) == None: |
|
|
|
lol = pos |
|
|
|
while grid.get(lol - d) != None: |
|
|
|
lol -= d |
|
|
|
if grid[lol] == '.': |
|
|
|
pos = lol |
|
|
|
else: |
|
|
|
continue |
|
|
|
d *= {'R': 1j, 'L': -1j}[b] |
|
|
|
|
|
|
|
|
|
|
|
render(grid) |
|
|
|
print(4 * int(pos.real + 1) + 1000 * int(pos.imag + 1) + {1: 0, -1j: 1, -1: 2, 1j: 3}[d]) |