fork download
  1. E=enumerate
  2. W=lambda d,v:[((x,y),X)for x,y in d for X in[(x+1,y),(x,y+1),(x-1,y),(x,y-1)]if d[(x,y)]==v]
  3. def f(b):
  4. q=[({(x,y):v for x,r in E(b)for y,v in E(r)},0)]
  5. for d,m in q:
  6. t=[]
  7. if m:
  8. for T,u in W(d,1):
  9. if(d.get(u,-1)in[0,2])>(T in t):d[u]=1;t+=u,
  10. q+=(d,0),;continue
  11. for T,u in W(d,2):
  12. if d.get(u,-1)<0:return 1
  13. q+=({**d,T:0,u:2},1),
  14.  
  15. def to_board(s):
  16. return [['.FO'.index(j)for j in i]for i in filter(None, s.split('\n'))]
  17.  
  18. s = """
  19. O
  20. """
  21. s1 = """
  22. ....
  23. .O..
  24. ....
  25. """
  26. s2 = """
  27. FFFFF
  28. .....
  29. ..O..
  30. .....
  31. """
  32. s3 = """
  33. FFFF
  34. FFFO
  35. FFFF
  36. """
  37. s4 = """
  38. .F....
  39. ......
  40. ......
  41. .F....
  42. ..O...
  43. .FF...
  44. .F....
  45. ..FF..
  46. """
  47. s5 = """
  48. ...F...F
  49. F.......
  50. ........
  51. .F......
  52. ....O...
  53. ...F....
  54. ........
  55. .F....F.
  56. """
  57. s6 = """
  58. FFF
  59. FOF
  60. FFF
  61. """
  62. s7 = """
  63. F.F
  64. .O.
  65. F.F
  66. """
  67. s8 = """
  68. ....F
  69. .....
  70. ..O..
  71. .....
  72. F....
  73. """
  74. s9 = """
  75. .F....F.
  76. ........
  77. ........
  78. F..O....
  79. ........
  80. .....F..
  81. """
  82. s10 = """
  83. ...F...F
  84. F......F
  85. ........
  86. .F......
  87. ....O...
  88. ...F....
  89. ........
  90. .F....F.
  91. """
  92. s11 ="""
  93. F..F
  94. .O..
  95. FF..
  96. """
  97.  
  98. print(f(to_board(s)))
  99. print(f(to_board(s1)))
  100. print(f(to_board(s2)))
  101. print(f(to_board(s3)))
  102. print(f(to_board(s4)))
  103. print(f(to_board(s5)))
  104. print(f(to_board(s6)))
  105. print(f(to_board(s7)))
  106. print(f(to_board(s8)))
  107. print(f(to_board(s9)))
  108. print(f(to_board(s10)))
  109. print(f(to_board(s11)))
  110.  
Success #stdin #stdout 0.12s 14168KB
stdin
Standard input is empty
stdout
1
1
1
1
1
1
None
None
None
None
None
None