Diff
Not logged in

Differences From Artifact [673d840a0e1a2769]:

To Artifact [cabc7d361baa4f5a]:


47 47 Tuple!(Pos, int)[] log; 48 48 bool[][] forbidden_cell; 49 49 50 50 char act(const(Game) g, string death, int breath) 51 51 { 52 52 const Pos ro = g.map.robot; 53 53 const Pos[] la = g.map.lambdas(); 54 + const Pos[] ra = g.map.razors(); 54 55 const Pos li = g.map.lift; 55 56 56 57 Tuple!(char,int)[] cand; 57 58 char c = 'W'; 58 59 if( la.empty ) { 59 60 cand = search(g, ro, [li], death); 60 61 } else { 61 - cand ~= search(g, ro, la, death); 62 + cand ~= search(g, ro, la~ra, death); 62 63 } 63 64 64 65 // 'dig' mode 65 66 if(cand.empty) { 66 67 const(Pos)[] tgt; 67 68 for(int y=1; y<=g.map.H; ++y) 68 69 for(int x=1; x<=g.map.W; ++x) ................................................................................ 160 161 } 161 162 if(v[y][x]) continue; 162 163 if(y==s.y && x==s.x && i<4) { 163 164 char c = "UDRL"[i]; 164 165 if( death.count(c) == 0 ) 165 166 return [tuple(c,step)]; 166 167 } else if(forbidden_cell[y][x]){ 167 - } else if(g.map[y,x]==' '||g.map[y,x]=='\\'||g.map[y,x]=='.'||i>=4) { 168 + } else if(g.map[y,x]==' '||g.map[y,x]=='\\'||g.map[y,x]=='.'||g.map[y,x]=='!'||i>=4) { 168 169 if(danger(y,x)) 169 170 continue; 170 171 q2 ~= new Pos(y,x); 171 172 v[y][x]=true; 172 173 } 173 174 } 174 175 } ................................................................................ 200 201 } 201 202 if(v[y][x]) continue; 202 203 if(y==s.y && x==s.x && i<4) { 203 204 char c = "UDRL"[i]; 204 205 if( death.count(c) == 0 ) 205 206 return [tuple(c,step)]; 206 207 } else if(forbidden_cell[y][x]){ 207 - } else if(g.map[y,x]==' '||g.map[y,x]=='\\'||g.map[y,x]=='.'||i>=4) { 208 + } else if(g.map[y,x]==' '||g.map[y,x]=='\\'||g.map[y,x]=='.'||g.map[y,x]=='!'||i>=4) { 208 209 q2 ~= new Pos(y,x); 209 210 v[y][x]=true; 210 211 } 211 212 } 212 213 } 213 214 q = q2; 214 215 } ................................................................................ 243 244 } 244 245 if(v[y][x]) continue; 245 246 if(y==s.y && x==s.x && i<4) { 246 247 char c = "UDRL"[i]; 247 248 if( death.count(c) == 0 ) 248 249 return [tuple(c,step)]; 249 250 } else if(forbidden_cell[y][x]){ 250 - } else if(g.map[y,x]==' '||g.map[y,x]=='\\'||g.map[y,x]=='.'||g.map[y,x]=='*'||i>=4) { 251 + } else if(g.map[y,x]==' '||g.map[y,x]=='\\'||g.map[y,x]=='.'||g.map[y,x]=='*'||g.map[y,x]=='!'||i>=4) { 251 252 q2 ~= new Pos(y,x); 252 253 v[y][x]=true; 253 254 } 254 255 } 255 256 } 256 257 q = q2; 257 258 }