fork download
  1. M=[(1,0),(-1,0),(0,-1),(0,1)]
  2. E=enumerate
  3. def f(b):
  4. D=eval(str(b));C=[(j,k)for j,r in E(b)for k,_ in E(r)];q=[(len(b)//2,0,b,0,{})]
  5. while q:
  6. x,y,b,s,m=q.pop(0);b[x][y]='#'
  7. if-~y==len(b[0]):return b
  8. for X,Y in M:
  9. if(K:=(x+X,y+Y))in set(C)-set(m.get((x,y),[]))and(B:=D[x+X][y+Y])not in'RY'and(s!=1>len([1for Q,W in M if(x+X+Q,y+Y+W)in C and'Y'==D[x+X+Q][y+Y+W]])or'B'!=B):
  10. I=eval(str(b));P={**m,(x,y):m.get((x,y),[])+[K]}
  11. if'U'==B:T=2;I[x+X][y+Y]='#';J,K=[K,Z:=(x+X+X,y+Y+Y)][Z in C];q+=[(J,K,I,2-('O'==D[J][K]),P)]*-~-(D[J][K]in'RY')
  12. else:q+=(*K,I,[s,1]['O'==B],P),
  13.  
  14. s1 = """
  15. BGYBG
  16. PGPBG
  17. PUBPB
  18. OUGYB
  19. PPOPP
  20. """
  21. s2 = """
  22. RRRR
  23. RPPR
  24. PUOR
  25. RPBP
  26. """
  27. s3 = """
  28. PYYOPPPP
  29. YRGGRYRG
  30. PGPBYPUR
  31. PYRBOYOG
  32. OBPGYYPP
  33. PRGPOYPO
  34. YPYOUGPP
  35. YGROBRYY
  36. RGRYBBOG
  37. """
  38. s4 = """
  39. PBYRYPGP
  40. OBRGOOBG
  41. PGPGUROO
  42. PUGORBUG
  43. PUPUUURO
  44. BGGUYPRG
  45. GBOPGGRG
  46. PUPUBUYB
  47. GYOPRPOG
  48. """
  49.  
  50. s5 = """
  51. GGGGR
  52. GGUGR
  53. OOGGB
  54. GGGGR
  55. GGGGR
  56. """
  57. def to_board(s):
  58. return [[*i] for i in filter(None, s.split('\n'))]
  59.  
  60.  
  61. print('\n'.join(map(''.join,f(to_board(s1)))))
  62. print('-'*20)
  63. print('\n'.join(map(''.join,f(to_board(s2)))))
  64. print('-'*20)
  65. print('\n'.join(map(''.join,f(to_board(s3)))))
  66. print('-'*20)
  67. print('\n'.join(map(''.join,f(to_board(s4)))))
  68. print('-'*20)
  69. print('\n'.join(map(''.join,f(to_board(s5)))))
Success #stdin #stdout 3.88s 32764KB
stdin
Standard input is empty
stdout
BGYBG
PGPBG
#####
OUGYB
PPOPP
--------------------
RRRR
R##R
###R
R###
--------------------
PYY#####
YR##RYRG
###BYPUR
#YRBOYOG
#BPGYYPP
PRGPOYPO
YPYOUGPP
YGROBRYY
RGRYBBOG
--------------------
PBYRYPGP
OBRGOOBG
PGPGUROO
PUGOR###
######RO
BG##YPRG
GB##GGRG
PUPUBUYB
GYOPRPOG
--------------------
GGGGR
####R
#OG##
GGGGR
GGGGR