Project

General

Profile

« Previous | Next » 

Revision 1002958d

Added by Leszek Koltunski about 1 year ago

Dino6 solver: corrections to the pruning engine.

View differences:

src/main/java/org/distorted/objectlib/tablebases/TBDino6.java
147 147
  @Override
148 148
  int[] newMove(int axis, int layer, int angle)
149 149
    {
150
    if( axis==0 && layer==2 ) return new int[] { axis, (1<<0)+(1<<1), angle==1 ? 1:-1};
151
    if( axis==3 && layer==0 ) return new int[] { axis, (1<<1)+(1<<2), angle==1 ? 1:-1};
150
    if( axis==0 && layer==2 ) return new int[] { axis, 3, angle==1 ? 1:-1};
151
    if( axis==3 && layer==0 ) return new int[] { axis, 6, angle==1 ? 1:-1};
152 152

  
153 153
    int maxAngle = mAngles[axis][layer];
154 154
    angle = maxAngle-angle;
......
176 176
    for(int i=0; i<len; i++)
177 177
      {
178 178
      int[] move = moves[i];
179
      if( move[1]==((1<<0)+(1<<1)) || move[1]==((1<<1)+(1<<2)) ) unrollMoves(moves,i);
179
      if( move[1]==3 || move[1]==6 ) unrollMoves(moves,i);
180 180
      }
181

  
182 181
 */
183 182
    }
184 183

  
......
186 185

  
187 186
  private void unrollMoves(int[][] moves, int index)
188 187
    {
189
    int caseUnroll=0;
190 188
    int[] move = moves[index];
189
    int len = moves.length;
191 190

  
192
    if( move[1]==((1<<0)+(1<<1)) )
191
    if( move[0]==0 && move[1]==3 )
193 192
      {
194
      move[1] = (1<<2);
193
      move[1] = 4;
195 194
      move[2] = -move[2];
196
      caseUnroll = move[2]>0 ? 0:1;
195
      for(int i=index+1; i<len; i++) unrollMove(moves[i],move[2]>0 ? 0:1);
197 196
      }
198
    else if( move[1]==((1<<1)+(1<<2)) )
197
    else if( move[0]==3 && move[1]==6 )
199 198
      {
200
      move[1] = (1<<0);
199
      move[1] = 1;
201 200
      move[2] = -move[2];
202
      caseUnroll = move[2]>0 ? 2:3;
201
      for(int i=index+1; i<len; i++) unrollMove(moves[i],move[2]>0 ? 0:1);
203 202
      }
203
    }
204 204

  
205
    int len = moves.length;
206
    for(int i=index+1; i<len; i++) unrollMove(moves[i],caseUnroll);
205
///////////////////////////////////////////////////////////////////////////////////////////////////
206

  
207
  private void printMoves(String s, int[][] moves)
208
    {
209
    StringBuilder sb = new StringBuilder();
210

  
211
    for(int[] move: moves)
212
      {
213
      sb.append('(');
214
      sb.append(move[0]);
215
      sb.append(' ');
216
      sb.append(move[1]);
217
      sb.append(' ');
218
      sb.append(move[2]);
219
      sb.append(')');
220
      }
221

  
222
    android.util.Log.e("D", s+" : "+sb);
207 223
    }
208 224

  
209 225
///////////////////////////////////////////////////////////////////////////////////////////////////
......
219 235
              switch(ax)
220 236
                {
221 237
                case 0: break;
222
                case 1: move[0]=3; move[1]=negate(la); break;
238
                case 1: move[0]=3; move[1]=negate(la); move[2] = -move[2]; break;
223 239
                case 2: move[0]=1; break;
224
                case 3: move[0]=2; move[1]=negate(la); break;
240
                case 3: move[0]=2; move[1]=negate(la); move[2] = -move[2]; break;
225 241
                }
226 242
              break;
227 243
      case 1: android.util.Log.e("D", "case 1 ax "+ax);
......
229 245
                {
230 246
                case 0: break;
231 247
                case 1: move[0]=2; break;
232
                case 2: move[0]=3; move[1]=negate(la); break;
233
                case 3: move[0]=1; move[1]=negate(la); break;
248
                case 2: move[0]=3; move[1]=negate(la); move[2] = -move[2]; break;
249
                case 3: move[0]=1; move[1]=negate(la); move[2] = -move[2]; break;
234 250
                }
235 251
              break;
236 252
      case 2: android.util.Log.e("D", "case 2 ax "+ax);
237 253
              switch(ax)
238 254
                {
239
                case 0: move[0]=1; move[1]=negate(la); break;
255
                case 0: move[0]=1; move[1]=negate(la); move[2] = -move[2]; break;
240 256
                case 1: move[0]=2; break;
241
                case 2: move[0]=0; move[1]=negate(la); break;
257
                case 2: move[0]=0; move[1]=negate(la); move[2] = -move[2]; break;
242 258
                case 3: break;
243 259
                }
244 260
              break;
245 261
      case 3: android.util.Log.e("D", "case 3 ax "+ax);
246 262
              switch(ax)
247 263
                {
248
                case 0: move[0]=2; move[1]=negate(la); break;
249
                case 1: move[0]=0; move[1]=negate(la); break;
264
                case 0: move[0]=2; move[1]=negate(la); move[2] = -move[2]; break;
265
                case 1: move[0]=0; move[1]=negate(la); move[2] = -move[2]; break;
250 266
                case 2: move[0]=1; break;
251 267
                case 3: break;
252 268
                }
......
258 274

  
259 275
  private int negate(int layer)
260 276
    {
261
    return 7-layer;
277
    switch(layer)
278
      {
279
      case 1: return 4;
280
      case 3: return 6;
281
      case 4: return 1;
282
      case 6: return 3;
283
      }
284
    return layer;
262 285
    }
263 286

  
264 287
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff