fork download
  1. def F(M,L,c):y=M[:M.index(c)].count("\n");return L[y].index(c),y
  2. def S(M):
  3. L=M.split("\n");Q=[("",)+F(M,L,"S")+(0,)];D={};R=range;H=len;U=R(2**30)
  4. while Q:
  5. C,*Q=sorted(Q,key=H);w,x,y,d=C
  6. for e in R(H(L)>y>-1<x<H(L[y])>0<H(D.get(C[1:],U))>H(w)and(L[y][x]in"+SE")*6):D[C[1:]]=w;E=(d+e)%6;Q+=[(w+",R,RR,RRR,LL,L".split(",")[e]+"F",x+[-1,1,2,1,-1,-2][E],y+[-1,-1,0,1,1,0][E],E)]
  7. J=min([D.get(F(M,L,"E")+(d,),U)for d in R(6)],key=H);return[J,"Invalid maze!"][J==U]
  8.  
  9. print("Verifying")
  10. # Maze 1
  11. assert S(""" 0 0 0 0
  12. 0 + 0 + 0
  13. 0 0 0 + + 0
  14. 0 + 0 + 0 + 0
  15. 0 0 + + 0 0 + 0
  16. 0 0 + 0 + 0 0 + 0
  17. E 0 + 0 0 + + 0
  18. + + 0 + 0 + 0
  19. 0 0 0 0 0 +
  20. + 0 + + +
  21. 0 S 0 0""") == "RFRFFLFLFRFFLFFFLFLFFRFLFLFRFRFRF"
  22. # Maze 2
  23. assert S(""" + 0 0 0 0 0 0
  24. 0 0 0 0 0 + + 0
  25. 0 0 E 0 + 0 0 + 0
  26. 0 0 0 0 0 0 0 +
  27. 0 + 0 0 + + +
  28. 0 0 + + 0 0
  29. S + 0 0 0""") == "Invalid maze!"
  30. # Maze 3
  31. assert S("""0 E S""") == "LF"
  32. # Maze 4
  33. assert S(""" E + 0
  34. 0 + + +
  35. 0 0 S
  36. + +""") == "FFLF"
  37. # Maze 5
  38. assert S(""" E
  39. 0 +
  40. 0 + +
  41. 0 +
  42. S""") == "RFFLFF"
  43. # Maze 6
  44. assert S(""" 0 E + 0 0
  45. 0 + 0 0 + +
  46. + 0 + + + 0
  47. + 0 + 0 + 0
  48. + + + 0 S""") == "FFLFLFFRFRFFRFF"
  49. # Maze 7
  50. assert S(""" E 0 + + 0
  51. 0 + 0 + + 0
  52. + + + 0 + 0
  53. + 0 0 0 0 0
  54. + + + + 0
  55. + 0 S 0""") == "FLFFRFFRFLF"
  56. print("Done")
  57.  
Success #stdin #stdout 0.03s 9984KB
stdin
Standard input is empty
stdout
Verifying
Done