30 |
30 |
{ {4,7,11}, {3,6, 9}, {5,8,10}, {0,1, 2} }
|
31 |
31 |
};
|
32 |
32 |
|
33 |
|
private static final int[][][] CORNER =
|
|
33 |
public static final int[][][] CORNER_QUATS =
|
34 |
34 |
{
|
35 |
|
{ {0,9},{2,4},{10,11},{6,8},{1,5},{3,7} },
|
36 |
|
{ {1,3},{0,11},{5,7},{9,10},{2,8},{4,6} },
|
37 |
|
{ {10,11},{6,8},{0,9},{2,4},{3,7},{1,5} },
|
38 |
|
{ {5,7},{9,10},{1,3},{0,11},{4,6},{2,8} },
|
39 |
|
{ {2,6},{1,7},{4,8},{3,5},{0,10},{9,11} },
|
40 |
|
{ {4,8},{3,5},{2,6},{1,7},{9,11},{0,10} }
|
|
35 |
{ {0,9},{2,4},{10,11},{8,6},{1,5},{3,7} }, // order of each pair determines the twist.
|
|
36 |
{ {1,3},{0,11},{5,7},{10,9},{2,8},{6,4} },
|
|
37 |
{ {10,11},{6,8},{0,9},{4,2},{7,3},{5,1} },
|
|
38 |
{ {7,5},{10,9},{3,1},{0,11},{6,4},{2,8} },
|
|
39 |
{ {2,6},{1,7},{8,4},{5,3},{0,10},{9,11} },
|
|
40 |
{ {4,8},{5,3},{6,2},{1,7},{9,11},{0,10} }
|
41 |
41 |
};
|
42 |
42 |
|
43 |
43 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
... | ... | |
161 |
161 |
|
162 |
162 |
private int computeCornerQuat(int originalLocation, int newLocation, int twist)
|
163 |
163 |
{
|
164 |
|
return CORNER[originalLocation][newLocation][twist];
|
|
164 |
return CORNER_QUATS[originalLocation][newLocation][twist];
|
165 |
165 |
}
|
166 |
166 |
|
167 |
167 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
... | ... | |
173 |
173 |
for(int i=0; i<6; i++)
|
174 |
174 |
{
|
175 |
175 |
int q = quats[i];
|
176 |
|
int[][] perm = CORNER[i];
|
|
176 |
int[][] perm = CORNER_QUATS[i];
|
177 |
177 |
|
178 |
178 |
for(int j=0; j<6; j++)
|
179 |
179 |
{
|
... | ... | |
196 |
196 |
int totalTwist = (index%32);
|
197 |
197 |
int corners_perm_num = (index/32);
|
198 |
198 |
|
199 |
|
int origT = totalTwist;
|
200 |
|
|
201 |
199 |
int[] centers_perm = new int[4];
|
202 |
200 |
TablebaseHelpers.getEvenPermutationFromNum(centers_perm,centers_perm_num);
|
203 |
201 |
int[] corners_perm = new int[6];
|
... | ... | |
212 |
210 |
quats[i] = computeCornerQuat(i,corners_perm[i],twist);
|
213 |
211 |
}
|
214 |
212 |
|
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 |
|
|
218 |
213 |
quats[ 6] = computeCenterQuat(0,centers_perm[0]);
|
219 |
214 |
quats[ 8] = computeCenterQuat(1,centers_perm[1]);
|
220 |
215 |
quats[11] = computeCenterQuat(2,centers_perm[2]);
|
... | ... | |
234 |
229 |
int totalTwist = computeCornerPerm(corners_perm,quats);
|
235 |
230 |
int corners_perm_num = TablebaseHelpers.computeEvenPermutationNum(corners_perm);
|
236 |
231 |
|
237 |
|
//int ret = centers_perm_num + 12*(totalTwist + 32*corners_perm_num);
|
238 |
|
/*
|
239 |
|
if( ret<0 || ret>=138240 || ret==64898 || ret==13440 )
|
240 |
|
{
|
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]);
|
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 |
|
|
258 |
|
|
259 |
232 |
return centers_perm_num + 12*(totalTwist + 32*corners_perm_num);
|
260 |
233 |
}
|
261 |
234 |
}
|
Diamond Skewb solver should be fully working now.