Revision d3fa1eed
Added by Leszek Koltunski about 1 year ago
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
CU_323 solver: last step.