Index: src/solver.d ================================================================== --- src/solver.d +++ src/solver.d @@ -138,22 +138,29 @@ bool[][] v = new bool[][](g.map.H+2, g.map.W+2); foreach(p; q) v[p.y][p.x]=true; for(int step=1; q.length; ++step) { Pos[] q2; foreach(p; q) { - int[] dy=[-1,+1,0,0]; - int[] dx=[0,0,-1,+1]; - for(int i=0; i<4; ++i) { - int y = p.y+dy[i]; - int x = p.x+dx[i]; + int[] yyy=[p.y-1,p.y+1,p.y,p.y]; + int[] xxx=[p.x,p.x,p.x-1,p.x+1]; + for(int i=0; i=4) { if(danger(y,x)) continue; q2 ~= new Pos(y,x); v[y][x]=true; } @@ -171,22 +178,29 @@ bool[][] v = new bool[][](g.map.H+2, g.map.W+2); foreach(p; q) v[p.y][p.x]=true; for(int step=10; q.length; ++step) { Pos[] q2; foreach(p; q) { - int[] dy=[-1,+1,0,0]; - int[] dx=[0,0,-1,+1]; - for(int i=0; i<4; ++i) { - int y = p.y+dy[i]; - int x = p.x+dx[i]; + int[] yyy=[p.y-1,p.y+1,p.y,p.y]; + int[] xxx=[p.x,p.x,p.x-1,p.x+1]; + for(int i=0; i=4) { q2 ~= new Pos(y,x); v[y][x]=true; } } } @@ -202,25 +216,32 @@ bool[][] v = new bool[][](g.map.H+2, g.map.W+2); foreach(p; q) v[p.y][p.x]=true; for(int step=20; q.length; ++step) { Pos[] q2; foreach(p; q) { - int[] dy=[-1,+1,0,0]; - int[] dx=[0,0,-1,+1]; - for(int i=0; i<4; ++i) { - int y = p.y+dy[i]; - int x = p.x+dx[i]; + int[] yyy=[p.y-1,p.y+1,p.y,p.y]; + int[] xxx=[p.x,p.x,p.x-1,p.x+1]; + for(int i=0; i=4) { q2 ~= new Pos(y,x); v[y][x]=true; - } else if(dy[i]==0 && g.map[p]==' ' && g.map[y,x]=='*' && (g.map[y+dy[i],x+dx[i]]==' '||g.map[y+dy[i],x+dx[i]]=='R')) { + } else if(i<4 && (y-p.y)==0 && g.map[p]==' ' && g.map[y,x]=='*' && (g.map[y+(y-p.y),x+(x-p.x)]==' '||g.map[y+(y-p.y),x+(x-p.x)]=='R')) { q2 ~= new Pos(y,x); v[y][x]=true; } } }