Diff
Not logged in

Differences From Artifact [accda2201a6a857e]:

To Artifact [da568e3b806540de]:


162 162 } 163 163 164 164 Tuple!(Pos, int)[] log; 165 165 bool[][] forbidden_cell; 166 166 167 167 char act(const(Game) g, string death, int breath) 168 168 { 169 + foreach(char c; "UDLR") 170 + if( death.count(c)==0 && is_one_way_load(g,c) ) 171 + return c; 172 + 169 173 const Pos ro = g.map.robot; 170 174 const Pos li = g.map.lift; 171 175 Pos[] la = g.map.lambdas(); 172 176 sort!((Pos a,Pos b){ 173 177 int ad=abs(a.y-li.y)+abs(a.x-li.x); 174 178 int bd=abs(b.y-li.y)+abs(b.x-li.x); 175 179 return ad>bd;; ................................................................................ 448 452 first_step = false; 449 453 q = q2; 450 454 } 451 455 return []; 452 456 } 453 457 return (danger_ok ? [] : tryA()) ~ tryB() ~ tryC(); 454 458 } 459 + 460 + bool is_one_way_load(in Game g, char c) 461 + { 462 + Pos p = g.map.robot.clone(); 463 + Pos q; 464 + if(c=='U') q=new Pos(p.y+1,p.x); 465 + if(c=='D') q=new Pos(p.y-1,p.x); 466 + if(c=='L') q=new Pos(p.y,p.x-1); 467 + if(c=='R') q=new Pos(p.y,p.x+1); 468 + char d = g.map[q]; 469 + if(!(d==' '||d=='.'||d=='!')) 470 + return false; 471 + 472 + bool found_lambda = false; 473 + int[4] dy=[-1,+1,0,0]; 474 + int[4] dx=[0,0,+1,-1]; 475 + for(;;) 476 + { 477 + Pos r = null; 478 + for(int i=0; i<4; ++i) { 479 + int y=q.y+dy[i]; 480 + int x=q.x+dx[i]; 481 + if(x==p.x && y==p.y) 482 + continue; 483 + char e = g.map[y,x]; 484 + if(e=='#') 485 + continue; 486 + if(e==' '||e=='.'||e=='!'||e=='R'||e=='\\') { 487 + if(r !is null) 488 + return false; 489 + r = new Pos(y,x); 490 + if(e=='\\') 491 + found_lambda = true; 492 + continue; 493 + } 494 + return false; 495 + } 496 + if(r is null) 497 + break; 498 + p=q; 499 + q=r; 500 + } 501 + return found_lambda; 502 + } 455 503 } 456 504 457 505 /// 458 506 /// Solver "Fire": in raiding and plundering other solvers, be like fire. 459 507 /// 460 508 class 侵掠如火(SubSolver) : Solver 461 509 { ................................................................................ 759 807 760 808 private Solver sub_solver; 761 809 } 762 810 763 811 alias 侵掠如火!(疾如風!(false)) FastSolver; 764 812 765 813 alias Switcher MainSolver; 766 -//alias 侵掠如火!(徐如林) MainSolver; 814 +//alias 徐如林 MainSolver;