Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

2 роки тому
2 роки тому
2 роки тому
2 роки тому
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import re
  2. def render(grid):
  3. xmin, *_, xmax = sorted(int(p.real) for p in grid)
  4. ymin, *_, ymax = sorted(int(p.imag) for p in grid)
  5. res = int(size % 9)
  6. for y in range(ymin, ymax + 1, res):
  7. for x in range(xmin, xmax + 1, res):
  8. print(grid.get(complex(x, y), ' '), end='')
  9. print()
  10. def move_50_1(grid, pos, drx, size=50):
  11. pos += drx
  12. if grid.get(pos) is None:
  13. match pos.imag // size, pos.real // size, drx:
  14. case -1, 1, -1j: return pos + size * 3j, drx
  15. case -1, 2, -1j: return pos + size * 1j, drx
  16. case 0, 0, -1 : return pos + size * 2 , drx
  17. case 0, 3, 1 : return pos + size * -2 , drx
  18. case 1, 0, -1 : return pos + size * 1 , drx
  19. case 1, 0, -1j: return pos + size * 2j, drx
  20. case 1, 2, 1 : return pos + size * -1 , drx
  21. case 1, 2, 1j: return pos + size * -1j, drx
  22. case 2, -1, -1 : return pos + size * 2 , drx
  23. case 2, 2, 1 : return pos + size * -2 , drx
  24. case 3, -1, -1 : return pos + size * 1 , drx
  25. case 3, 1, 1 : return pos + size * -1 , drx
  26. case 3, 1, 1j: return pos + size * -3j, drx
  27. case 4, 0, 1j: return pos + size * -2j, drx
  28. case default: print('x', default)
  29. return pos, drx
  30. def solve(inst, grid, teleport):
  31. pos = min(grid, key=lambda p: (p.real == 0, p.imag))
  32. drx = 1
  33. grid = grid.copy()
  34. for step in re.findall(r'(R|L|\d+)', inst):
  35. if step.isdigit():
  36. for _ in range(int(step)):
  37. grid[pos] = {1j: 'v', -1j: '^', -1: '<', 1: '>'}[drx]
  38. new, dr2 = teleport(grid, pos, drx)
  39. match grid[new]:
  40. case '#':
  41. break
  42. case _:
  43. pos, drx = new, dr2
  44. else:
  45. drx *= {'R': 1j, 'L': -1j}[step]
  46. render(grid)
  47. return 4 * int(pos.real + 1) + 1000 * int(pos.imag + 1) + {1: 0, 1j: 1, -1: 2, -1j: 3}[drx]
  48. def main():
  49. global size
  50. text = open(0).read()
  51. src, inst = text.split('\n\n')
  52. grid = {complex(x, y): c for y, l in enumerate(src.splitlines())
  53. for x, c in enumerate(l) if c in '.#'}
  54. size = (len(grid) // 6) ** 0.5
  55. print(solve(inst, grid, eval(f'move_{int(size)}_1')))
  56. # print(solve(inst, grid, eval(f'move_{int(size)}_2')))
  57. main()