fork download
  1. import math
  2. N=math.dist
  3. E=enumerate
  4. M=[(0,1),(1,0),(-1,0),(0,-1),(1,1),(-1,1),(1,-1),(-1,-1)]
  5. def f(b):
  6. d={(x,y):v for x,r in E(b)for y,v in E(r)};q=[([i for i in d if('#'==d[(1,i[1])])>i[0]][:1],0)]
  7. for[*P,z],D in q:
  8. if-~len(P)>len(b[0])and any((z[0]+X,z[1]+Y)==P[0]for X,Y in M):
  9. for X,Y in P+[z]:b[X][Y]='o'
  10. return'\n'.join(map(''.join,b))
  11. elif O:=[v for X,Y in M if'.'==d.get(v:=(z[0]+X,z[1]+Y))and(v in P)<(D or Y>0)]:q+=[(P+[z,i],D+N(i,z))for i in O if all(G>D+N(z,i)for T,G in q if T[-1]==i)]
  12.  
  13. def to_board(s):
  14. return [[*i] for i in filter(None, s.split('\n'))]
  15.  
  16. s = """
  17. ........
  18. ....##..
  19. ...####.
  20. ..###...
  21. .#####..
  22. .#####..
  23. ..##....
  24. ........
  25. """
  26.  
  27. s1 = """
  28. ...........
  29. ...##......
  30. ..#####....
  31. ..#######..
  32. .#########.
  33. ...#######.
  34. ...#####.#.
  35. ....####...
  36. ...........
  37. """
  38. s2 = """
  39. ...
  40. .#.
  41. ...
  42. """
  43. s3 = """
  44. ......
  45. .####.
  46. ......
  47. """
  48. s4 = """
  49. ......
  50. ..##..
  51. ...#..
  52. ......
  53. ......
  54. """
  55. s5 = """
  56. .......
  57. .#####.
  58. ...#...
  59. ...#...
  60. .#####.
  61. .......
  62. """
  63. s6 = """
  64. .......
  65. ...#...
  66. ...#...
  67. .#####.
  68. ...#...
  69. ...#...
  70. .......
  71. """
  72. s7 = """
  73. .......
  74. .#####.
  75. .##..#.
  76. ..#..#.
  77. .......
  78. """
  79. s8 = """
  80. ........................
  81. .............#..........
  82. ...........#.#.##...#...
  83. ...........#.#.###.##...
  84. ..........########.##...
  85. ..........############..
  86. .....#....############..
  87. ...#.###.##############.
  88. ..##.##################.
  89. ..####################..
  90. ...##################...
  91. ..##################....
  92. ....################....
  93. .###################....
  94. .#####################..
  95. ..##################....
  96. .####################...
  97. .#...##############.....
  98. .##...#############.....
  99. .#.....###....#.........
  100. .......#................
  101. ........................
  102. """
  103. print(f(to_board(s)))
  104. print('-'*50)
  105. print(f(to_board(s1)))
  106. print('-'*50)
  107. print(f(to_board(s2)))
  108. print('-'*50)
  109. print(f(to_board(s3)))
  110. print('-'*50)
  111. print(f(to_board(s4)))
  112. print('-'*50)
  113. print(f(to_board(s5)))
  114. print('-'*50)
  115. print(f(to_board(s6)))
  116. print('-'*50)
  117. print(f(to_board(s7)))
  118. print('-'*50)
  119. print(f(to_board(s8)))
Success #stdin #stdout 0.18s 14180KB
stdin
Standard input is empty
stdout
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##oo..
..oo....
--------------------------------------------------
...oooo....
..o##..o...
.o#####.o..
o.#######o.
o#########o
.o.#######o
..o#####.#o
...o####oo.
....oooo...
--------------------------------------------------
.o.
o#o
.o.
--------------------------------------------------
.oooo.
o####o
.oooo.
--------------------------------------------------
..oo..
.o##o.
..o#o.
...o..
......
--------------------------------------------------
.ooooo.
o#####o
o..#..o
o..#..o
o#####o
.ooooo.
--------------------------------------------------
...o...
..o#o..
.o.#.o.
o#####o
.o.#.o.
..o#o..
...o...
--------------------------------------------------
.ooooo.
o#####o
o##..#o
.o#..#o
..oooo.
--------------------------------------------------
.............ooooooo....
...........oo#......o...
..........o#.#.##...#o..
.........o.#.#.###.##o..
........o.########.##o..
.....ooo..############o.
...oo#....############o.
..o#.###.##############o
.o##.##################o
o.####################.o
o..##################..o
o.##################...o
o...################...o
o###################...o
o#####################.o
o.##################..o.
o####################o..
o#...##############.o...
o##...#############o....
o#.....###....#oooo.....
.o.....#ooooooo.........
..oooooo................