commit 6a64512e0e218f46743e7dad882321653f84b3c2
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Mar 22 14:41:33 2023 +0100

    Skewb solver: corrections for error detection.

diff --git a/src/main/java/org/distorted/solvers/SolverSkewb.java b/src/main/java/org/distorted/solvers/SolverSkewb.java
index f718a6b5..18fe27f0 100644
--- a/src/main/java/org/distorted/solvers/SolverSkewb.java
+++ b/src/main/java/org/distorted/solvers/SolverSkewb.java
@@ -68,18 +68,28 @@ public class SolverSkewb extends SolverTablebase
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void getCenters(TwistyObject object, int[] centers)
+  private int getCenters(TwistyObject object, int[] output)
     {
-    final int[] face_colors = {4,5,2,3,0,1};
-    int[] tmp = new int[6];
+    final int[] map = {4,5,2,3,0,1};
+    int[] inverted_perm = new int[6];
+    boolean[] present = new boolean[6];
 
     for(int i=0; i<6; i++)
       {
       int color = object.getCubitFaceStickerIndex(i+8,0) - 6;
-      tmp[i] = face_colors[color];
+      present[color] = true;
+      inverted_perm[i] = map[mFaceColors[color]];
       }
 
-    TablebaseHelpers.invertPermutation(tmp,centers);
+    if( !present[0] ) return ERROR_CENTER_0_MISSING;
+    if( !present[1] ) return ERROR_CENTER_1_MISSING;
+    if( !present[2] ) return ERROR_CENTER_2_MISSING;
+    if( !present[3] ) return ERROR_CENTER_3_MISSING;
+    if( !present[4] ) return ERROR_CENTER_4_MISSING;
+    if( !present[5] ) return ERROR_CENTER_5_MISSING;
+
+    TablebaseHelpers.invertPermutation(inverted_perm,output);
+    return 0;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -104,12 +114,12 @@ public class SolverSkewb extends SolverTablebase
 
   private int computeFaceColors(int[][] corners, int[] output)
     {
-    final int[][] map = { {0,3},{5,6},{0,5},{6,3},{0,6},{3,5} };
+    final int[][] corner_indices = { {0,3},{5,6},{0,5},{6,3},{0,6},{3,5} };
 
     for(int i=0; i<6; i++)
       {
-      int c1 = map[i][0];
-      int c2 = map[i][1];
+      int c1 = corner_indices[i][0];
+      int c2 = corner_indices[i][1];
       output[i] = commonCornerColor(corners[c1],corners[c2]);
       if( output[i]<0 ) return ERROR_CORNERS_CANNOT;
       }
@@ -119,8 +129,12 @@ public class SolverSkewb extends SolverTablebase
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private boolean cornerIs(int[] corner, int c0, int c1, int c2)
+  private boolean cornerIs(int[] corner, int f0, int f1, int f2)
     {
+    int c0 = mFaceColors[f0];
+    int c1 = mFaceColors[f1];
+    int c2 = mFaceColors[f2];
+
     return ( (corner[0]==c0 && corner[1]==c1 && corner[2]==c2 ) ||
              (corner[1]==c0 && corner[2]==c1 && corner[0]==c2 ) ||
              (corner[2]==c0 && corner[0]==c1 && corner[1]==c2 )  );
@@ -156,23 +170,6 @@ public class SolverSkewb extends SolverTablebase
     return 0;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private int checkAllCentersPresent(int[] centers)
-    {
-    boolean[] present = new boolean[6];
-    for(int i=0; i<6; i++) present[centers[i]]= true;
-
-    if( !present[0] ) return ERROR_CENTER_4_MISSING;
-    if( !present[1] ) return ERROR_CENTER_5_MISSING;
-    if( !present[2] ) return ERROR_CENTER_2_MISSING;
-    if( !present[3] ) return ERROR_CENTER_3_MISSING;
-    if( !present[4] ) return ERROR_CENTER_0_MISSING;
-    if( !present[5] ) return ERROR_CENTER_1_MISSING;
-
-    return 0;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private int retFreeCornerPermutation(int[] perm, int[][] corners)
@@ -223,12 +220,12 @@ public class SolverSkewb extends SolverTablebase
 
   private void computeCornerQuats(int[] quats, int[][] corners, int[] perm)
     {
-    final int[] map = { 4,2,3,5,1,5,4,1 };
+    final int[] zeroeth_face_map = { 4,2,3,5,1,5,4,1 };
     int[] twist = new int[8];
 
     for(int i=0; i<8; i++)
       {
-      int color = mFaceColors[map[i]];
+      int color = mFaceColors[zeroeth_face_map[i]];
       int[] c = corners[retCornerPerm(i,perm)];
 
            if( c[0]==color ) twist[i] = 0;
@@ -257,8 +254,7 @@ public class SolverSkewb extends SolverTablebase
     int result2 = checkAllCornersPresent(corners);
     if( result2<0 ) return result2;
 
-    getCenters(object,centers);
-    int result3 = checkAllCentersPresent(centers);
+    int result3 = getCenters(object,centers);
     if( result3<0 ) return result3;
 
     if( !TablebaseHelpers.permutationIsEven(centers) ) return ERROR_TWO_CENTERS;
