Differences From Artifact [3f2a2d28b89b3fbf]:
- File        
src/solver.d
- 2012-07-16 06:32:03 - part of checkin [1b261bd13b] on branch trunk - Run Wind and Forest both and take better. (user: kinaba) [annotate]
 
To Artifact [1e2f760afef7fe9f]:
- File        
src/solver.d
- 2012-07-16 06:57:54 - part of checkin [50fc08d883] on branch trunk - Fast solver should go towards up (since it knows nothing about water...) (user: kinaba) [annotate]
 
  613                  return tuple(s, log, state);                                         613                  return tuple(s, log, state);
  614          }                                                                            614          }
  615  }                                                                                    615  }
  616                                                                                       616  
  617  ///                                                                                  617  ///
  618  /// Solver "Wind": let your rapidity be that of the wind.                            618  /// Solver "Wind": let your rapidity be that of the wind.
  619  ///                                                                                  619  ///
  620  class 疾如風 : Solver                                                               |   620  class 疾如風(bool UP) : Solver
  621  {                                                                                    621  {
  622          Game g;                                                                      622          Game g;
  623          this(in Game g)                                                              623          this(in Game g)
  624          {                                                                            624          {
  625                  this.g = g.clone();                                                  625                  this.g = g.clone();
  626          }                                                                            626          }
  627                                                                                       627  
................................................................................................................................................................................
  689                                                  reverse(trace);                      689                                                  reverse(trace);
  690                                                  return trace.idup;                   690                                                  return trace.idup;
  691                                          }                                            691                                          }
  692                                          p=q;                                         692                                          p=q;
  693                                  }                                                    693                                  }
  694                          }                                                            694                          }
  695                                                                                       695  
  696                          int[4] dy=[-1,+1,0,0];                                   |   696                          int[4] dy=UP ? [+1,0,0,-1]       : [-1,+1,0,0];
  697                          int[4] dx=[0,0,-1,+1];                                   |   697                          int[4] dx=UP ? [0,-1,+1,0]       : [0,0,-1,+1];
  698                          char[] ds=['D','U','L','R'];                             |   698                          char[] ds=UP ? ['U','L','R','D'] : ['D','U','L','R'];
  699                          for(int i=0; i<4; ++i) {                                     699                          for(int i=0; i<4; ++i) {
  700                                  if(g.map.robot==p && death.count(ds[i]))             700                                  if(g.map.robot==p && death.count(ds[i]))
  701                                          continue;                                    701                                          continue;
  702                                  int y=p.y+dy[i], x=p.x+dx[i];                        702                                  int y=p.y+dy[i], x=p.x+dx[i];
  703                                  if((g.map[y,x]==' '||g.map[y,x]=='\\'||g.map[y,x     703                                  if((g.map[y,x]==' '||g.map[y,x]=='\\'||g.map[y,x
  704                                          Q.push(tuple(new Pos(y,x),p), dist+1);       704                                          Q.push(tuple(new Pos(y,x),p), dist+1);
  705                                  }                                                    705                                  }
................................................................................................................................................................................
  713  class Switcher                                                                       713  class Switcher
  714  {                                                                                    714  {
  715          this(in Game g)                                                              715          this(in Game g)
  716          {                                                                            716          {
  717                  if(g.map.W*g.map.H <= 1600)                                          717                  if(g.map.W*g.map.H <= 1600)
  718                          sub_solver = new 侵掠如火!(徐如林)(g);                              718                          sub_solver = new 侵掠如火!(徐如林)(g);
  719                  else                                                                 719                  else
  720                          sub_solver = new 侵掠如火!(疾如風)(g);                          |   720                          sub_solver = new 侵掠如火!(疾如風!(true))(g);
  721          }                                                                            721          }
  722          char single_step() { return sub_solver.single_step(); }                      722          char single_step() { return sub_solver.single_step(); }
  723          void force(char c) { return sub_solver.force(c); }                           723          void force(char c) { return sub_solver.force(c); }
  724                                                                                       724  
  725          private Solver sub_solver;                                                   725          private Solver sub_solver;
  726  }                                                                                    726  }
  727                                                                                       727  
  728  alias 侵掠如火!(疾如風) FastSolver;                                                     |   728  alias 侵掠如火!(疾如風!(false)) FastSolver;
  729                                                                                       729  
  730  //alias Switcher MainSolver;                                                     |   730  alias Switcher MainSolver;
  731  //alias 侵掠如火!(疾如風) MainSolver;                                                   <
  732  alias 侵掠如火!(徐如林) MainSolver;                                                     |   731  //alias 侵掠如火!(徐如林) MainSolver;
  733  //alias 疾如風 MainSolver;                                                          <
  734  //alias 徐如林 MainSolver;                                                          <
  735  //alias 不動如山 MainSolver;                                                         <