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