You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.2KB

  1. import re
  2. text = open(0).read()
  3. p1, p2 = text.split('\n\n')
  4. grid = {}
  5. for y, row in enumerate(p1.splitlines()):
  6. for x, cell in enumerate(row):
  7. if cell.strip():
  8. grid[complex(x, y)] = cell
  9. def render(grid):
  10. xmin, *_, xmax = sorted(int(p.real) for p in grid)
  11. ymin, *_, ymax = sorted(int(p.imag) for p in grid)
  12. for y in range(ymin, ymax + 1):
  13. for x in range(xmin, xmax + 1):
  14. print(grid.get(complex(x, y), ' '), end='')
  15. print()
  16. pos = min(grid, key=lambda p: (p.real == 0, p.imag))
  17. grid[pos] = '@'
  18. d = 1
  19. for n, b in zip(map(int, re.sub(r'[A-Z]', ' ', p2).split()), re.sub(r'\d', ' ', p2).split()):
  20. for _ in range(n):
  21. if grid.get(pos + d) in set('.<v>^'):
  22. pos += d
  23. elif grid.get(pos + d) == '#':
  24. continue
  25. elif grid.get(pos + d) == None:
  26. lol = pos
  27. while grid.get(lol - d) != None:
  28. lol -= d
  29. if grid[lol] == '.':
  30. pos = lol
  31. else:
  32. continue
  33. d *= {'R': 1j, 'L': -1j}[b]
  34. render(grid)
  35. print(4 * int(pos.real + 1) + 1000 * int(pos.imag + 1) + {1: 0, -1j: 1, -1: 2, 1j: 3}[d])