fork download
  1. E=enumerate
  2. def f(m):
  3. u=int(len(m)**.5);m=[m[i:i+u]for i in range(0,len(m),u)];Q={(x,y)for x,r in E(m)for y,v in E(r)};W=[]
  4. def M(x,y):J,K=[(-1,0),(0,1),(1,0),(0,-1)][int(m[x][y])-1];return(x+J)%u,(y+K)%u
  5. while Q:
  6. (x,y),*Q=Q;D={(x,y):1};F=1
  7. while D[(x,y)]<3:x,y=M(x,y);D[(x,y)]=D.get((x,y),0)+1
  8. while F:
  9. Q,F={*Q}-{*D},0
  10. for x,y in Q:
  11. if M(x,y)in D:D[(x,y)]=F=1
  12. I=[0,0]
  13. for i in D:I[D[i]<2]+=1
  14. W+=I,
  15. return W
  16.  
  17. print(f('1232124421111421313441231'))
Success #stdin #stdout 0.11s 14016KB
stdin
Standard input is empty
stdout
[[6, 5], [2, 10], [2, 0]]