| 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.