Project

General

Profile

« Previous | Next » 

Revision d3fa1eed

Added by Leszek Koltunski about 1 year ago

CU_323 solver: last step.

View differences:

src/main/java/org/distorted/objectlib/tablebases/TBCuboid323.java
40 40
          {6,7,4,2,5,3,1,0}
41 41
      };
42 42

  
43
  private int[][] mAngles;
44
  private boolean mUpsideDown;
45

  
43 46
///////////////////////////////////////////////////////////////////////////////////////////////////
44 47
// remove perm[1] which is always equal to 1.
45 48

  
......
92 95
             new int[] {R.raw.cu_323_pruning17,R.raw.cu_323_pruning18} );
93 96
    }
94 97

  
98
///////////////////////////////////////////////////////////////////////////////////////////////////
99

  
100
  public void initialize()
101
    {
102
    mUpsideDown = false;
103
    }
104

  
95 105
///////////////////////////////////////////////////////////////////////////////////////////////////
96 106

  
97 107
  int[][] getBasicAngles()
98 108
    {
99
    int[] tmp2 = {2,2,2};
100
    int[] tmp4 = {4,4};
101
    return new int[][] { tmp2,tmp4,tmp2 };
109
    if( mAngles==null )
110
      {
111
      int[] tmp2 = {2,2,2};
112
      int[] tmp4 = {4,4};
113
      mAngles = new int[][] { tmp2,tmp4,tmp2 };
114
      }
115

  
116
    return mAngles;
102 117
    }
103 118

  
104 119
///////////////////////////////////////////////////////////////////////////////////////////////////
......
185 200

  
186 201
///////////////////////////////////////////////////////////////////////////////////////////////////
187 202
// specifically for the tablebase
203
///////////////////////////////////////////////////////////////////////////////////////////////////
204
// now turn the (ax=2, middle and back layer) artificial moves [ introduced by computeBitLayer)
205
// back to the natural (ax=2, front layer). Turn the whole thing upside down each time we do it.
206

  
207
  @Override
208
  int[] newMove(int axis, int layer, int angle)
209
    {
210
    if( axis==2 )
211
      {
212
      if( layer==1 )
213
        {
214
        mUpsideDown = !mUpsideDown;
215
        return new int[] { axis, 4, angle };
216
        }
217
      }
218
    else if( mUpsideDown )
219
      {
220
      if( axis==0 ) layer=2-layer;
221
      if( axis==1 ) { layer=1-layer; angle = 4-angle; }
222
      }
223

  
224
    int maxAngle = mAngles[axis][layer];
225
    angle = maxAngle-angle;
226
    if( angle> 0.5f*maxAngle ) angle -= maxAngle;
227
    return new int[] { axis, (1<<layer), angle };
228
    }
229

  
188 230
///////////////////////////////////////////////////////////////////////////////////////////////////
189 231
// 8!*8!/4 --> https://www.jaapsch.net/puzzles/domino.htm
190 232

  

Also available in: Unified diff