30 |
30 |
{ {4,7,11}, {3,6, 9}, {5,8,10}, {0,1, 2} }
|
31 |
31 |
};
|
32 |
32 |
|
33 |
|
|
34 |
33 |
private static final int[][][] CORNER =
|
35 |
34 |
{
|
36 |
35 |
{ {0,9},{2,4},{10,11},{6,8},{1,5},{3,7} },
|
... | ... | |
52 |
51 |
|
53 |
52 |
public TablebasesSkewbDiamond(Resources res)
|
54 |
53 |
{
|
55 |
|
super(res, R.raw.pyra_3_tablebase);
|
|
54 |
super(res, R.raw.diam_2_tablebase);
|
56 |
55 |
}
|
57 |
56 |
|
58 |
57 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
... | ... | |
89 |
88 |
{ 0.0f, SQ2/2, 0.0f},
|
90 |
89 |
{ 0.0f,-SQ2/2, 0.0f},
|
91 |
90 |
|
|
91 |
{ 0.0f, SQ2/4, 0.5f},
|
92 |
92 |
{ 0.5f, SQ2/4, 0.0f},
|
93 |
93 |
{ 0.0f, SQ2/4,-0.5f},
|
94 |
94 |
{-0.5f, SQ2/4, 0.0f},
|
95 |
|
{ 0.0f, SQ2/4, 0.5f},
|
|
95 |
{ 0.0f,-SQ2/4, 0.5f},
|
96 |
96 |
{ 0.5f,-SQ2/4, 0.0f},
|
97 |
97 |
{ 0.0f,-SQ2/4,-0.5f},
|
98 |
|
{-0.5f,-SQ2/4, 0.0f},
|
99 |
|
{ 0.0f,-SQ2/4, 0.5f}
|
|
98 |
{-0.5f,-SQ2/4, 0.0f}
|
100 |
99 |
};
|
101 |
100 |
}
|
102 |
101 |
|
... | ... | |
180 |
179 |
{
|
181 |
180 |
int[] p = perm[j];
|
182 |
181 |
|
183 |
|
if( p[0]==q ) { output[i]=j; break; }
|
184 |
|
if( p[1]==q ) { output[i]=j; if( i<5 ) totalTwist++; break; }
|
|
182 |
if( p[0]==q ) { output[i]=j; break; }
|
|
183 |
if( p[1]==q ) { output[i]=j; if( i<5 ) totalTwist+=(1<<i); break; }
|
185 |
184 |
}
|
186 |
|
|
187 |
|
if( i<5 ) totalTwist*=2;
|
188 |
185 |
}
|
189 |
186 |
|
190 |
187 |
return totalTwist;
|
... | ... | |
196 |
193 |
{
|
197 |
194 |
int centers_perm_num = (index%12);
|
198 |
195 |
index /= 12;
|
199 |
|
int totalTwist = (index%128);
|
200 |
|
int corners_perm_num = (index/128);
|
|
196 |
int totalTwist = (index%32);
|
|
197 |
int corners_perm_num = (index/32);
|
|
198 |
|
|
199 |
int origT = totalTwist;
|
201 |
200 |
|
202 |
201 |
int[] centers_perm = new int[4];
|
203 |
202 |
TablebaseHelpers.getEvenPermutationFromNum(centers_perm,centers_perm_num);
|
... | ... | |
213 |
212 |
quats[i] = computeCornerQuat(i,corners_perm[i],twist);
|
214 |
213 |
}
|
215 |
214 |
|
|
215 |
//android.util.Log.e("D", "quats: centers_num="+centers_perm_num+" twist="+origT+" corners_num="+corners_perm_num);
|
|
216 |
//android.util.Log.e("D", "quats: centers_perm: "+corners_perm[0]+" "+corners_perm[1]+" "+corners_perm[2]+" "+corners_perm[3]+" "+corners_perm[4]+" "+corners_perm[5]);
|
|
217 |
|
216 |
218 |
quats[ 6] = computeCenterQuat(0,centers_perm[0]);
|
217 |
219 |
quats[ 8] = computeCenterQuat(1,centers_perm[1]);
|
218 |
220 |
quats[11] = computeCenterQuat(2,centers_perm[2]);
|
... | ... | |
232 |
234 |
int totalTwist = computeCornerPerm(corners_perm,quats);
|
233 |
235 |
int corners_perm_num = TablebaseHelpers.computeEvenPermutationNum(corners_perm);
|
234 |
236 |
|
235 |
|
int ret = centers_perm_num + 12*(totalTwist + 32*corners_perm_num);
|
236 |
|
|
237 |
|
if( ret<0 || ret>=138240 )
|
|
237 |
//int ret = centers_perm_num + 12*(totalTwist + 32*corners_perm_num);
|
|
238 |
/*
|
|
239 |
if( ret<0 || ret>=138240 || ret==64898 || ret==13440 )
|
238 |
240 |
{
|
239 |
241 |
android.util.Log.e("D", "centers_perm: "+centers_perm_num+" twist: "+totalTwist+" corners_perm: "+corners_perm_num);
|
|
242 |
android.util.Log.e("D", "centers_perm: "+center_perm[0]+" "+center_perm[1]+" "+center_perm[2]+" "+center_perm[3]);
|
|
243 |
android.util.Log.e("D", "centers_quat: "+quats[6]+" "+quats[8]+" "+quats[11]+" "+quats[13]);
|
|
244 |
android.util.Log.e("D", "corners_perm: "+corners_perm[0]+" "+corners_perm[1]+" "+corners_perm[2]+" "+corners_perm[3]+" "+corners_perm[4]+" "+corners_perm[5]);
|
|
245 |
android.util.Log.e("D", "corners_quat: "+quats[0]+" "+quats[1]+" "+quats[2]+" "+quats[3]+" "+quats[4]+" "+quats[5]);
|
240 |
246 |
}
|
|
247 |
*/
|
|
248 |
/*
|
|
249 |
if( ret==64898 )
|
|
250 |
{
|
|
251 |
android.util.Log.e("D", "getIndex: "+quats[0]+" "+quats[1]+" "+quats[2]+" "+quats[3]+" "+quats[4]+" "+quats[5]
|
|
252 |
+" "+quats[6]+" "+quats[7]+" "+quats[8]+" "+quats[9]+" "+quats[10]+" "+quats[11]+" "+quats[12]+" "+quats[13]);
|
|
253 |
}
|
|
254 |
*/
|
|
255 |
//android.util.Log.e("D", "index: centers_num="+centers_perm_num+" twist="+totalTwist+" corners_num="+corners_perm_num);
|
|
256 |
//android.util.Log.e("D", "index: corners_perm: "+corners_perm[0]+" "+corners_perm[1]+" "+corners_perm[2]+" "+corners_perm[3]+" "+corners_perm[4]+" "+corners_perm[5]);
|
|
257 |
|
241 |
258 |
|
242 |
259 |
return centers_perm_num + 12*(totalTwist + 32*corners_perm_num);
|
243 |
260 |
}
|
Progress with the Diamond Skewb solver.