Differences From Artifact [1928257cf62dcd18]:
- File        
game.d
- 2012-07-14 08:31:35 - part of checkin [a5e6c99b3d] on branch trunk - Guarded. (user: kinaba) [annotate]
 
 
To Artifact [7c15481493257083]:
- File        
game.d
- 2012-07-14 08:55:55 - part of checkin [69105bf94a] on branch trunk - Stand alone solver. (user: kinaba) [annotate]
 
 - File        
src/game.d
- 2012-07-14 09:16:47 - part of checkin [6293256fec] on branch trunk - Preparing for submission... (user: kinaba) [annotate]
 
 
    95     95   
    96     96    static Map load(string[] raw_data, string[string] params)
    97     97    {
    98     98     // TODO: choose optimal representation.
    99     99     return new Map(raw_data, params);
   100    100    }
   101    101   
   102         - private {
   103         -  char[][] data;
   104         -  Pos robot;
   105         -  Pos lift;
   106         -  int waterproof;
   107         - }
          102  + char[][] data;
          103  + Pos robot;
          104  + Pos lift;
          105  + int waterproof;
          106  +
   108    107    Map clone() { return new Map(this); }
   109    108    this(Map m) {
   110    109     foreach(s; m.data)
   111    110      this.data ~= s.dup;
   112    111     this.robot = m.robot.clone();
   113    112     this.lift = m.lift.clone();
   114    113     this.waterproof = m.waterproof;
................................................................................
   125    124      this.data[$-1][r.length..$] = ' ';
   126    125     }
   127    126   
   128    127     for(int y=1; y<=H; ++y)
   129    128     for(int x=1; x<=W; ++x) {
   130    129      if(this[y,x] == 'R')
   131    130       this.robot = new Pos(y,x);
   132         -   if(this[y,x] == 'L')
          131  +   if(this[y,x] == 'L' || this[y,x] == 'O')
   133    132       this.lift = new Pos(y,x);
   134    133     }
   135    134   
   136    135     this.waterproof = params.get("Waterproof", "5").to!int();
   137    136    }
   138    137   
   139    138    const @property {
................................................................................
   164    163     data[H-1-y][x] = c;
   165    164    }
   166    165   
   167    166    void opIndexAssign(char c, Pos p)
   168    167    {
   169    168     this[p.y, p.x] = c;
   170    169    }
          170  +
          171  + Pos[] lambdas() {
          172  +  Pos[] ans;
          173  +  for(int y=1; y<=H; ++y)
          174  +  for(int x=1; x<=W; ++x)
          175  +   if(this[y,x] == '\\')
          176  +    ans ~= new Pos(y,x);
          177  +  return ans;
          178  + }
   171    179   
   172    180    bool cleared()
   173    181    {
   174    182     for(int y=1; y<=H; ++y)
   175    183     for(int x=1; x<=W; ++x)
   176    184      if(this[y,x] == 'L' || this[y,x] == 'O')
   177    185       return false;