fork download
  1. import math
  2. E=enumerate
  3. z='X'
  4. M=(0,1),(1,0),(-1,0),(0,-1),(1,1),(-1,1),(1,-1),(-1,-1)
  5. def f(g):
  6. d={(x,y):v for x,r in E(g)for y,v in E(r)}
  7. if sum(z==d[i]for i in d)==1:return 0
  8. if len(e:=[(x,y)for x,y in d if d[(x,y)]==z==z*sum(z==d.get((x+X,y+Y))for X,Y in M)])==2:
  9. a,b=e;q=p=[a];c=0
  10. for a in q:
  11. if a==b:return c if all(i in p for i in d if z==d[i])else-1
  12. for X,Y in M:
  13. if(z==d.get(V:=(a[0]+X,a[1]+Y)))>(V in p):c+=math.dist(a,V);p+=V,;q+=V,
  14.  
  15. def to_grid(s):
  16. return [[*i] for i in filter(None, s.split('\n'))]
  17. s = """
  18. XXX.
  19. ...X
  20. ..X.
  21. """
  22.  
  23. s1 = """
  24. ....X....
  25. .X.X.X.X.
  26. X..X..X.X
  27. .XX.....X
  28. """
  29. s2 = """
  30. ....
  31. ....
  32. ..X.
  33. """
  34. s3 = """
  35. .X..
  36. X..X
  37. .XX.
  38. """
  39. s4 = """
  40. ....
  41. ..X.
  42. .X..
  43. """
  44. s5 = """
  45. ....
  46. XX..
  47. ....
  48. """
  49. s6= """
  50. .X.X
  51. X.X.
  52. ....
  53. """
  54. s7 = """
  55. ....
  56. ....
  57. ....
  58. ....
  59. """
  60. s8 = """
  61. .XX.
  62. X..X
  63. .XX.
  64. """
  65. s9 = """
  66. ...X
  67. ..XX
  68. .X..
  69. """
  70. s10 = """
  71. ....
  72. .X.X
  73. ...X
  74. """
  75. s11 = """
  76. X.X.
  77. .X..
  78. X.X.
  79. """
  80.  
  81. print(f(to_grid(s)))
  82. print(f(to_grid(s1)))
  83. print(f(to_grid(s2)))
  84. print(f(to_grid(s3)))
  85. print(f(to_grid(s4)))
  86. print(f(to_grid(s5)))
  87. print(f(to_grid(s6)))
  88. print(f(to_grid(s7)))
  89. print(f(to_grid(s8)))
  90. print(f(to_grid(s9)))
  91. print(f(to_grid(s10)))
  92. print(f(to_grid(s11)))
Success #stdin #stdout 0.08s 14248KB
stdin
Standard input is empty
stdout
4.82842712474619
14.313708498984763
0
5.242640687119286
1.4142135623730951
1.0
4.242640687119286
None
None
None
-1
None