fork download
  1. def f(t,b):
  2. q=[(*t,0,b[t[0]][t[1]],*i)for i in[(0,1),(0,-1),(1,0),(-1,0)]]
  3. while q:
  4. x,y,d,c,X,Y=q.pop(0)
  5. if len(b)>(j:=x+X)>-1<(k:=y+Y)<len(b[0])and d<2:
  6. if('.'==(S:=b[j][k]))>d:yield(j,k)
  7. if'.'!=S and S.isupper()!=c.isupper()and d:yield(j,k);d=2
  8. q+=(j,k,[d,1][d<2and'.'!=S],c,X,Y),
  9.  
  10. def format_board(B):
  11. return [[*i] for i in filter(None, B.split('\n'))]
  12.  
  13. b1 = """
  14. ....h....
  15. .........
  16. .........
  17. ....h....
  18. .........
  19. ....C..ac
  20. ....E....
  21. ....h....
  22. ....g....
  23. ....R...."""
  24. print([*f((5, 4),format_board(b1))])
  25. b2="""
  26. .........
  27. .........
  28. .........
  29. .........
  30. .........
  31. ....C....
  32. .........
  33. .........
  34. .........
  35. .........
  36. """
  37. print([*f((5, 4),format_board(b2))])
  38. b3 = """
  39. .........
  40. .....G...
  41. .........
  42. .........
  43. .....e...
  44. .........
  45. .........
  46. h..R.c..S
  47. .....a...
  48. ........."""
  49. print([*f((7, 5),format_board(b3))])
  50. b4="""
  51. ..s......
  52. ..A...e..
  53. .........
  54. EACCcsh.H
  55. ..r......
  56. .....S...
  57. ......s..
  58. ....C....
  59. ..g......"""
  60. print([*f((3,2),format_board(b4))])
  61. b5="""
  62. rheagaehr
  63. .........
  64. .c.....c.
  65. s.s.s.s.s
  66. .........
  67. .........
  68. S.S.S.S.S
  69. .C.....C.
  70. .........
  71. RHEAGAEHR"""
  72. print([*f((7,7),format_board(b5))])
Success #stdin #stdout 0.09s 14160KB
stdin
Standard input is empty
stdout
[(5, 5), (5, 3), (4, 4), (5, 6), (5, 2), (7, 4), (5, 1), (5, 8), (5, 0), (0, 4)]
[(5, 5), (5, 3), (6, 4), (4, 4), (5, 6), (5, 2), (7, 4), (3, 4), (5, 7), (5, 1), (8, 4), (2, 4), (5, 8), (5, 0), (9, 4), (1, 4), (0, 4)]
[(7, 6), (7, 4), (6, 5), (7, 7), (5, 5), (1, 5)]
[(2, 2), (3, 4), (0, 2), (8, 2)]
[(7, 8), (7, 6), (8, 7), (6, 7), (7, 5), (5, 7), (7, 4), (4, 7), (7, 3), (3, 7), (7, 2), (0, 7)]