fork(1) download
  1. import io
  2. import os
  3. from collections import deque
  4. from sys import stdout
  5.  
  6. input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
  7.  
  8. z: int = int(input())
  9.  
  10. offsets = {
  11. "N": (0, 1),
  12. "E": (1, 0),
  13. "S": (0, -1),
  14. "W": (-1, 0),
  15. }
  16.  
  17. lefts = {
  18. "N": "W",
  19. "W": "S",
  20. "S": "E",
  21. "E": "N",
  22. }
  23.  
  24. rights = {
  25. "N": "E",
  26. "E": "S",
  27. "S": "W",
  28. "W": "N"
  29. }
  30.  
  31. while z:
  32. z -= 1
  33. n, moves = input().decode().split()
  34. n = int(n)
  35. currdir = "E"
  36. mvset = set()
  37. mvq = deque()
  38.  
  39. curr = (0, 0)
  40. mvset.add(curr)
  41. mvq.append(curr)
  42.  
  43. collision = None
  44. move_count = 0
  45.  
  46. for mv in moves:
  47. move_count += 1
  48. x, y = curr
  49.  
  50. if mv == "L":
  51. currdir = lefts[currdir]
  52. elif mv == "R":
  53. currdir = rights[currdir]
  54.  
  55. ox, oy = offsets[currdir]
  56. curr = (x + ox, y + oy)
  57.  
  58. if curr in mvset:
  59. collision = move_count
  60. break
  61.  
  62. mvset.add(curr)
  63. mvq.append(curr)
  64.  
  65. if mv == "E":
  66. continue
  67.  
  68. last = mvq.popleft()
  69. mvset.remove(last)
  70.  
  71. if collision is None:
  72. stdout.write("TAK\n")
  73. else:
  74. stdout.write(str(collision) + '\n')
Success #stdin #stdout 0.03s 9804KB
stdin
8
6 FLERFF
8 EEEELLLL
33 ELELERELELEERELELERELELRELELEEFEE
33 ELELERELELEERELELERELELRELELEEFEF
6 EEERRR
30 EEEERFFFFRFFRFRFFLELLERLLLRFRFR
6 FLERFF
8 EEEELLLL
stdout
TAK
7
33
33
6
22
TAK
7