fork download
  1. def searchloop_sub(mp, y0, x0):
  2. ly, lx, ny, nx = y0, x0, y0+d[mp[y0][x0]][0], x0+d[mp[y0][x0]][1]
  3. root = [[ly, lx], [ny, nx]]
  4. while True:
  5. if ny<0 or ny>=H or nx<0 or nx>=W:
  6. return False
  7. ty, tx, ny, nx = ny, nx, ny+d[mp[ny][nx]][0], nx+d[mp[ny][nx]][1]
  8. if ny==ly and nx==lx:
  9. return False
  10. if [ny, nx] in root:
  11. root.append([ny, nx])
  12. for p in reversed(root):
  13. if mp[p[0]][p[1]]=="#":
  14. break
  15. mp[p[0]][p[1]] = '#'
  16. return True
  17. root.append([ny, nx])
  18. ly, lx = ty, tx
  19.  
  20. def searchloop(mpd):
  21. mp = []
  22. for mpdi in mpd:
  23. mp.append(list(mpdi))
  24. for y in range(H):
  25. for x in range(W):
  26. ret = searchloop_sub(mp, y, x)
  27. if ret:
  28. break
  29. if ret:
  30. break
  31. for ty in range(H):
  32. print("".join(mp[ty]))
  33. print()
  34.  
  35. d = {"N":[-1, 0], "E":[0, 1], "S":[1, 0], "W":[0, -1]}
  36. H, W = 4, 5
  37. searchloop(["SWNSW","EWSNN","WSNNE","EEWWS"])
  38. searchloop(["EESWW","NWSEE","NWWSS","WENNW"])
  39. searchloop(["EWESN","SWESW","ENNWS","WSEES"])
  40.  
Success #stdin #stdout 0.03s 9312KB
stdin
Standard input is empty
stdout
SWNSW
EWSNN
WSNNE
EEWWS

###WW
#W#EE
###SS
WENNW

EWESN
SW##W
EN##S
WSEES