fork download
  1. from itertools import*
  2. E=enumerate
  3. def f(w):
  4. C=0;D={i:(C:=C+1)if'|'==a else 0for i,a in E(w[0])};B=[[*i]for i in zip(*w[::-1])]
  5. for I,j in E(B):
  6. for a,b in groupby(E(j),key=lambda x:x[1].lower()):
  7. u=[*b]
  8. if'x'==a:
  9. for A,_ in u:B[I][A]=' '
  10. if v:=sum(2*(t=='X')-1for _,t in u):B[I][u[-1][0]]=v
  11. return'\n'.join(f'{D[i-1]} {D[i+1]} '+['L','R'][a==1]for j in zip(*B)for i,a in E(j)if a in[1,-1])
  12.  
  13. s0 = """
  14. | | | |
  15. X | |
  16. | | x
  17. | X |
  18. | | | |
  19. """
  20. s1 = """
  21. | | | | | |
  22. | | X x
  23. X | x |
  24. | x | X
  25. X X | |
  26. | | | | | |
  27. """
  28. s2 = """
  29. | | |
  30. X |
  31. | x
  32. | | |
  33. | X
  34. | x
  35. | | |
  36. """
  37. s3 = """
  38. |
  39. """
  40. s4 = """
  41. | |
  42. X
  43. x
  44. X
  45. x
  46. X
  47. x
  48. X
  49. x
  50. X
  51. x
  52. | |
  53. """
  54. s5 = """
  55. | |
  56. X
  57. X
  58. x
  59. X
  60. x
  61. x
  62. | |
  63. """
  64. def to_board(s):
  65. return [[*i]for i in filter(None, s.split('\n'))]
  66.  
  67. print(f(to_board(s0)))
  68. print('-'*40)
  69. print(f(to_board(s1)))
  70. print('-'*40)
  71. print(f(to_board(s2)))
  72. print('-'*40)
  73. print(f(to_board(s3)))
  74. print('-'*40)
  75. print(f(to_board(s4)))
  76. print('-'*40)
  77. print(f(to_board(s5)))
Success #stdin #stdout 0.1s 14092KB
stdin
Standard input is empty
stdout
2 3 R
3 4 L
1 2 R
----------------------------------------
1 2 R
3 4 R
2 3 L
5 6 R
1 2 R
4 5 L
3 4 R
5 6 L
----------------------------------------
2 3 L
1 2 R
----------------------------------------

----------------------------------------

----------------------------------------