Project

General

Profile

« Previous | Next » 

Revision 5b9d6595

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
156 156
    return new int[] { axis, (1<<layer), angle };
157 157
    }
158 158

  
159
///////////////////////////////////////////////////////////////////////////////////////////////////
160
// here we change back the mapping introduced by 'newMove()'
161

  
162
  @Override
163
  void convertMoves(int[][] moves)
164
    {
165
    for(int[] move : moves )
166
      {
167
      int[] newMove = newMove(move[0],move[1],move[2]);
168

  
169
      move[0] = newMove[0];
170
      move[1] = newMove[1];
171
      move[2] = newMove[2];
172
      }
173
/*
174
    int len = moves.length;
175

  
176
    for(int i=0; i<len; i++)
177
      {
178
      int[] move = moves[i];
179
      if( move[1]==((1<<0)+(1<<1)) || move[1]==((1<<1)+(1<<2)) ) unrollMoves(moves,i);
180
      }
181

  
182
 */
183
    }
184

  
185
///////////////////////////////////////////////////////////////////////////////////////////////////
186

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

  
192
    if( move[1]==((1<<0)+(1<<1)) )
193
      {
194
      move[1] = (1<<2);
195
      move[2] = -move[2];
196
      caseUnroll = move[2]>0 ? 0:1;
197
      }
198
    else if( move[1]==((1<<1)+(1<<2)) )
199
      {
200
      move[1] = (1<<0);
201
      move[2] = -move[2];
202
      caseUnroll = move[2]>0 ? 2:3;
203
      }
204

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

  
209
///////////////////////////////////////////////////////////////////////////////////////////////////
210

  
211
  private void unrollMove(int[] move, int caseUnroll)
212
    {
213
    int ax = move[0];
214
    int la = move[1];
215

  
216
    switch(caseUnroll)
217
      {
218
      case 0: android.util.Log.e("D", "case 0 ax "+ax);
219
              switch(ax)
220
                {
221
                case 0: break;
222
                case 1: move[0]=3; move[1]=negate(la); break;
223
                case 2: move[0]=1; break;
224
                case 3: move[0]=2; move[1]=negate(la); break;
225
                }
226
              break;
227
      case 1: android.util.Log.e("D", "case 1 ax "+ax);
228
              switch(ax)
229
                {
230
                case 0: break;
231
                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;
234
                }
235
              break;
236
      case 2: android.util.Log.e("D", "case 2 ax "+ax);
237
              switch(ax)
238
                {
239
                case 0: move[0]=1; move[1]=negate(la); break;
240
                case 1: move[0]=2; break;
241
                case 2: move[0]=0; move[1]=negate(la); break;
242
                case 3: break;
243
                }
244
              break;
245
      case 3: android.util.Log.e("D", "case 3 ax "+ax);
246
              switch(ax)
247
                {
248
                case 0: move[0]=2; move[1]=negate(la); break;
249
                case 1: move[0]=0; move[1]=negate(la); break;
250
                case 2: move[0]=1; break;
251
                case 3: break;
252
                }
253
              break;
254
      }
255
    }
256

  
257
///////////////////////////////////////////////////////////////////////////////////////////////////
258

  
259
  private int negate(int layer)
260
    {
261
    return 7-layer;
262
    }
263

  
159 264
///////////////////////////////////////////////////////////////////////////////////////////////////
160 265

  
161 266
  int getSize()

Also available in: Unified diff