Project

General

Profile

« Previous | Next » 

Revision 971a184e

Added by Leszek Koltunski about 1 year ago

CU_232 solver: finished

View differences:

src/main/java/org/distorted/objectlib/tablebases/TablebasesAbstract.java
348 348

  
349 349
///////////////////////////////////////////////////////////////////////////////////////////////////
350 350

  
351
  private void getNextAxisLayerAngle(int[] data)
351
  private void getNextAxisLayerAngleQuat(int[] data)
352 352
    {
353 353
    int axis = data[0];
354 354
    int layer= data[1];
......
366 366
        data[0] = (axis<mNumAxis-1) ? axis+1 : 0;
367 367
        }
368 368
      }
369

  
370
    data[3] = data[2];
371
    for(int i=0; i<data[0]; i++) data[3] += (mAngles[i][0]-1);
369 372
    }
370 373

  
371 374
///////////////////////////////////////////////////////////////////////////////////////////////////
......
374 377
    {
375 378
    if( !mInitialized ) return null;
376 379

  
377
    int[] data = new int[3];
380
    int[] data = new int[4];
378 381
    byte level = mTablebase.retrievePacked(index);
379 382
    ArrayList<int[]> moves = new ArrayList<>();
380 383
    int[] quats = getQuats(index);
......
388 391
      data[0]=0;
389 392
      data[1]=0;
390 393
      data[2]=1;
394
      data[3]=1;
391 395

  
392 396
      for(int ax=0; ax<mNumAxis; ax++)
393 397
        for(int cubit=0; cubit<mNumCubits; cubit++)
......
398 402
        int ax    = data[0];
399 403
        int layer = data[1];
400 404
        int angle = data[2];
405
        int quat  = data[3];
401 406

  
402 407
        if( mRotatable[ax][layer] )
403 408
          {
404 409
          int bitLayer = (1<<layer);
405 410
          System.arraycopy(quats, 0, tmpQuats, 0, numQuats);
406
          int quat = ax*(mAngles[ax][0]-1) + angle;
407 411

  
408 412
          for(int cubit=0; cubit<mNumCubits; cubit++)
409 413
            if( mRotRow[cubit][ax]==bitLayer )
......
425 429
            }
426 430
          }
427 431

  
428
        getNextAxisLayerAngle(data);
432
        getNextAxisLayerAngleQuat(data);
429 433
        }
430 434

  
431 435
      quats = getQuats(index);
......
446 450
    {
447 451
    if( !mInitialized ) return null;
448 452

  
449
    int[] data = new int[3];
453
    int[] data = new int[4];
450 454
    int level=0;
451 455
    int[][] moves = new int[depth][3];
452 456
    int[] quats = getQuats(0);
......
460 464
      data[0]=0;
461 465
      data[1]=0;
462 466
      data[2]=1;
467
      data[3]=1;
463 468

  
464 469
      int random = rnd.nextInt(mScalingFactor);
465
      for(int i=0; i<random; i++) getNextAxisLayerAngle(data);
470
      for(int i=0; i<random; i++) getNextAxisLayerAngleQuat(data);
466 471

  
467 472
      for(int ax=0; ax<mNumAxis; ax++)
468 473
        for(int cubit=0; cubit<mNumCubits; cubit++)
......
473 478
        int ax    = data[0];
474 479
        int layer = data[1];
475 480
        int angle = data[2];
481
        int quat  = data[3];
476 482

  
477 483
        if( mRotatable[ax][layer] )
478 484
          {
479 485
          int bitLayer = (1<<layer);
480 486
          System.arraycopy(quats, 0, tmpQuats, 0, numQuats);
481
          int quat = ax*(mAngles[ax][0]-1) + angle;
482 487

  
483 488
          for(int cubit=0; cubit<mNumCubits; cubit++)
484 489
            if( mRotRow[cubit][ax]==bitLayer )
......
500 505
            }
501 506
          }
502 507

  
503
        getNextAxisLayerAngle(data);
508
        getNextAxisLayerAngleQuat(data);
504 509
        }
505 510

  
506 511
      if( !found )
src/main/java/org/distorted/objectlib/tablebases/TablebasesCuboid232.java
18 18

  
19 19
public class TablebasesCuboid232 extends TablebasesAbstract
20 20
{
21
  private static final int[][] CORNER_MAP = new int[][]
22
      {
23
          {0,4,7,1,2,3,5,6},
24
          {2,0,1,6,3,4,7,5},
25
          {7,1,0,4,5,6,2,3},
26
          {1,6,2,0,7,5,3,4},
27
          {4,3,5,7,0,2,6,1},
28
          {3,2,6,5,4,0,1,7},
29
          {5,7,4,3,6,1,0,2},
30
          {6,5,3,2,1,7,4,0}
31
      };
32

  
33
///////////////////////////////////////////////////////////////////////////////////////////////////
34

  
21 35
  public TablebasesCuboid232()
22 36
    {
23 37
    super();
......
27 41

  
28 42
  public TablebasesCuboid232(Resources res)
29 43
    {
30
    super(res,org.distorted.objectlib.R.raw.ivy_2_tablebase);
44
    super(res,org.distorted.objectlib.R.raw.cu_232_tablebase);
31 45
    }
32 46

  
33 47
///////////////////////////////////////////////////////////////////////////////////////////////////
......
96 110

  
97 111
  private void getCornerQuats(int[] output, int[] perm)
98 112
    {
99

  
113
    for(int i=0; i<8; i++)
114
      output[i] = CORNER_MAP[i][perm[i]];
100 115
    }
101 116

  
102 117
///////////////////////////////////////////////////////////////////////////////////////////////////
103 118

  
104
  private void getEdgeQuats(int[] output, int[] perm)
119
  private int[] getCornerPerm(int[] quats)
105 120
    {
121
    int[] output = new int[8];
106 122

  
123
    for(int i=0; i<8; i++)
124
      {
125
      int quat = quats[i];
126

  
127
      for(int j=0; j<8; j++)
128
        {
129
        if( CORNER_MAP[i][j]==quat )
130
          {
131
          output[i]=j;
132
          break;
133
          }
134
        }
135
      }
136

  
137
    return output;
107 138
    }
108 139

  
109 140
///////////////////////////////////////////////////////////////////////////////////////////////////
110 141

  
111
  private int[] getCornerPerm(int[] quats)
142
  private void getEdgeQuats(int[] output, int[] perm)
112 143
    {
113
    return null;
144
    switch(perm[0])
145
      {
146
      case 0: output[8] = 0; break;
147
      case 2: output[8] = 5; break;
148
      case 3: output[8] = 3; break;
149
      default: android.util.Log.e("D", "getEdgeQuats ERROR1");
150
      }
151

  
152
    output[9] = 0;
153

  
154
    switch(perm[2])
155
      {
156
      case 0: output[10] = 5; break;
157
      case 2: output[10] = 0; break;
158
      case 3: output[10] = 1; break;
159
      default: android.util.Log.e("D", "getEdgeQuats ERROR2");
160
      }
161

  
162
    switch(perm[3])
163
      {
164
      case 0: output[11] = 3; break;
165
      case 2: output[11] = 1; break;
166
      case 3: output[11] = 0; break;
167
      default: android.util.Log.e("D", "getEdgeQuats ERROR3");
168
      }
114 169
    }
115 170

  
116 171
///////////////////////////////////////////////////////////////////////////////////////////////////
117 172

  
118 173
  private int[] getEdgePerm(int[] quats)
119 174
    {
120
    return null;
175
    int[] output = new int[4];
176

  
177
    switch(quats[8])
178
      {
179
      case 0: output[0] = 0; break;
180
      case 5: output[0] = 2; break;
181
      case 3: output[0] = 3; break;
182
      default: android.util.Log.e("D", "getEdgePerm ERROR1");
183
      }
184

  
185
    output[1] = 1;
186

  
187
    switch(quats[10])
188
      {
189
      case 0: output[2] = 2; break;
190
      case 1: output[2] = 3; break;
191
      case 5: output[2] = 0; break;
192
      default: android.util.Log.e("D", "getEdgePerm ERROR2");
193
      }
194

  
195
    switch(quats[11])
196
      {
197
      case 0: output[3] = 3; break;
198
      case 1: output[3] = 2; break;
199
      case 3: output[3] = 0; break;
200
      default: android.util.Log.e("D", "getEdgePerm ERROR3");
201
      }
202

  
203
    return output;
121 204
    }
122 205

  
123 206
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff