Revision 713af0c5
Added by Leszek Koltunski almost 2 years ago
src/main/java/org/distorted/solvers/SolverJing.java | ||
---|---|---|
47 | 47 |
private static final int ERROR_TWO_CENTERS = -19; |
48 | 48 |
|
49 | 49 |
private TablebasesAbstract mSolver; |
50 |
private int[] mFaceColors; |
|
50 | 51 |
|
51 | 52 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
52 | 53 |
|
... | ... | |
349 | 350 |
int result1 = checkAllCornersPresent(corners); |
350 | 351 |
if( result1<0 ) return result1; |
351 | 352 |
|
352 |
int[] faces = computeFaceColors(corners);
|
|
353 |
int[][] edgeColors = computeEdgeColors(faces);
|
|
353 |
mFaceColors = computeFaceColors(corners);
|
|
354 |
int[][] edgeColors = computeEdgeColors(mFaceColors);
|
|
354 | 355 |
|
355 | 356 |
getEdges(object,edges); |
356 | 357 |
int result2 = checkAllEdgesPresent(edges,edgeColors); |
... | ... | |
362 | 363 |
|
363 | 364 |
for(int i=0; i<4; i++) |
364 | 365 |
{ |
365 |
corner_twist[i] = computePieceTwist(i,corners[i],faces);
|
|
366 |
corner_twist[i] = computePieceTwist(i,corners[i],mFaceColors);
|
|
366 | 367 |
if( corner_twist[i]<0 ) return ERROR_CORNERS_CANNOT; |
367 | 368 |
} |
368 | 369 |
|
... | ... | |
373 | 374 |
if( !even ) return ERROR_TWO_EDGES; |
374 | 375 |
int[] edge_twist = new int[6]; |
375 | 376 |
TBPyraminx.getEdgeTwist(edge_twist,quats,0); |
376 |
/* |
|
377 |
for(int i=0; i<4; i++) android.util.Log.e("D", "cornerTwist "+i+" : "+corner_twist[i]); |
|
378 |
for(int i=0; i<6; i++) android.util.Log.e("D", "edgeTwist "+i+" : "+edge_twist[i]); |
|
379 |
for(int i=0; i<6; i++) android.util.Log.e("D", "edge perm "+i+" : "+permutation[i]); |
|
380 |
*/ |
|
381 |
int twist_gr = computeCenterTwist(centers,faces[1],faces[2]); |
|
382 |
int twist_ry = computeCenterTwist(centers,faces[2],faces[0]); |
|
377 |
|
|
378 |
int twist_gr = computeCenterTwist(centers,mFaceColors[1],mFaceColors[2]); |
|
379 |
int twist_ry = computeCenterTwist(centers,mFaceColors[2],mFaceColors[0]); |
|
383 | 380 |
|
384 | 381 |
if( (twist_ry-twist_gr+1)%3 != 0 ) return ERROR_TWO_CENTERS; |
385 | 382 |
|
... | ... | |
388 | 385 |
|
389 | 386 |
if( (total_twist-twist_gr)%3 !=0 ) return ERROR_CORNER_TWISTED; |
390 | 387 |
|
391 |
int green_face = getFaceOfCenter(faces[1],centers);
|
|
388 |
int green_face = getFaceOfCenter(mFaceColors[1],centers);
|
|
392 | 389 |
|
393 | 390 |
int totalEdgeTwist=0; |
394 | 391 |
for(int i=0; i<6; i++) totalEdgeTwist += edge_twist[i]; |
... | ... | |
398 | 395 |
int edgeTwist = edge_twist[0]+ 2*(edge_twist[1]+ 2*(edge_twist[2]+ 2*(edge_twist[3]+ 2*edge_twist[4]))); |
399 | 396 |
int perm_num = TablebaseHelpers.computeEvenPermutationNum(permutation); |
400 | 397 |
|
401 |
//android.util.Log.e("D", "ret: green_face="+green_face+" vertTwist="+vertexTwist+" edgeTwist="+edgeTwist+" perm: "+perm_num); |
|
402 |
|
|
403 | 398 |
return green_face + 4*(vertexTwist + 81*(edgeTwist + 32*perm_num)); |
404 | 399 |
} |
405 | 400 |
|
... | ... | |
435 | 430 |
|
436 | 431 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
437 | 432 |
|
438 |
private int getColorIndex6(int color)
|
|
433 |
private int getFaceIndex3(int face)
|
|
439 | 434 |
{ |
440 |
switch(color) |
|
435 |
switch(mFaceColors[face]) |
|
436 |
{ |
|
437 |
case 0: return R.string.color_green3; |
|
438 |
case 1: return R.string.color_yellow3; |
|
439 |
case 2: return R.string.color_blue3; |
|
440 |
case 3: return R.string.color_red3; |
|
441 |
} |
|
442 |
|
|
443 |
return -1; |
|
444 |
} |
|
445 |
|
|
446 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
447 |
|
|
448 |
private int getFaceIndex6(int face) |
|
449 |
{ |
|
450 |
switch(mFaceColors[face]) |
|
441 | 451 |
{ |
442 | 452 |
case 0: return R.string.color_green6; |
443 | 453 |
case 1: return R.string.color_yellow6; |
... | ... | |
465 | 475 |
|
466 | 476 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
467 | 477 |
|
468 |
private String edgeError(Resources res, int color0, int color1)
|
|
478 |
private String edgeError(Resources res, int face0, int face1)
|
|
469 | 479 |
{ |
470 |
int j0 = getColorIndex3(color0);
|
|
471 |
int j1 = getColorIndex6(color1);
|
|
480 |
int j0 = getFaceIndex3(face0);
|
|
481 |
int j1 = getFaceIndex6(face1);
|
|
472 | 482 |
|
473 | 483 |
String c0 = res.getString(j0); |
474 | 484 |
String c1 = res.getString(j1); |
... | ... | |
487 | 497 |
case ERROR_CORNER_GYR_MISSING: return cornerError(res,3,1,0); |
488 | 498 |
case ERROR_CORNER_GYB_MISSING: return cornerError(res,2,1,0); |
489 | 499 |
case ERROR_EDGE_RB_MISSING : return edgeError(res,3,2); |
490 |
case ERROR_EDGE_RY_MISSING : return edgeError(res,3,1);
|
|
491 |
case ERROR_EDGE_RG_MISSING : return edgeError(res,3,0);
|
|
492 |
case ERROR_EDGE_YB_MISSING : return edgeError(res,2,1);
|
|
493 |
case ERROR_EDGE_GB_MISSING : return edgeError(res,2,0);
|
|
500 |
case ERROR_EDGE_RY_MISSING : return edgeError(res,2,0);
|
|
501 |
case ERROR_EDGE_RG_MISSING : return edgeError(res,2,1);
|
|
502 |
case ERROR_EDGE_YB_MISSING : return edgeError(res,3,0);
|
|
503 |
case ERROR_EDGE_GB_MISSING : return edgeError(res,3,1);
|
|
494 | 504 |
case ERROR_EDGE_GY_MISSING : return edgeError(res,1,0); |
495 | 505 |
case ERROR_CENTER_G_MISSING : String colorG = res.getString(R.string.color_green2); |
496 | 506 |
return res.getString(R.string.solver_generic_missing_center,colorG); |
Also available in: Unified diff
Jing Solver: correct detection of missing edge colors.