commit b4f45fdcba2af1166eb48395f8db6130d2de7f80
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Mar 22 13:15:54 2023 +0100

    Skewb solver: full TB version works now.

diff --git a/src/main/java/org/distorted/solvers/SolverSkewb.java b/src/main/java/org/distorted/solvers/SolverSkewb.java
index 0bb28682..f718a6b5 100644
--- a/src/main/java/org/distorted/solvers/SolverSkewb.java
+++ b/src/main/java/org/distorted/solvers/SolverSkewb.java
@@ -9,6 +9,8 @@
 
 package org.distorted.solvers;
 
+import static org.distorted.objectlib.tablebases.TBSkewb.FREE;
+
 import android.content.res.Resources;
 
 import org.distorted.main.R;
@@ -68,10 +70,16 @@ public class SolverSkewb extends SolverTablebase
 
   private void getCenters(TwistyObject object, int[] centers)
     {
-    int[] map = {12,13,10,11,8,9};
+    final int[] face_colors = {4,5,2,3,0,1};
+    int[] tmp = new int[6];
 
     for(int i=0; i<6; i++)
-      centers[i] = object.getCubitFaceStickerIndex(map[i],0) - 6;
+      {
+      int color = object.getCubitFaceStickerIndex(i+8,0) - 6;
+      tmp[i] = face_colors[color];
+      }
+
+    TablebaseHelpers.invertPermutation(tmp,centers);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -166,12 +174,9 @@ public class SolverSkewb extends SolverTablebase
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// free corners: 1,2,4,7
 
   private int retFreeCornerPermutation(int[] perm, int[][] corners)
     {
-    int[] map = {1,2,4,7};
-
     perm[0] = -1;
     perm[1] = -1;
     perm[2] = -1;
@@ -179,7 +184,7 @@ public class SolverSkewb extends SolverTablebase
 
     for(int i=0; i<4; i++)
       {
-      int[] cor = corners[map[i]];
+      int[] cor = corners[FREE[i]];
 
       if( cornerIs(cor,2,5,0) ) perm[0] = i;
       if( cornerIs(cor,3,4,0) ) perm[1] = i;
@@ -199,18 +204,16 @@ public class SolverSkewb extends SolverTablebase
 
   private int retCornerPerm(int index, int[] perm)
     {
-    int[] free = {1,2,4,7};
-
     switch(index)
       {
       case 0: return 0;
-      case 1: return free[perm[0]];
-      case 2: return free[perm[1]];
+      case 1: return FREE[perm[0]];
+      case 2: return FREE[perm[1]];
       case 3: return 3;
-      case 4: return free[perm[2]];
+      case 4: return FREE[perm[2]];
       case 5: return 5;
       case 6: return 6;
-      case 7: return free[perm[3]];
+      case 7: return FREE[perm[3]];
       }
 
     return -1;
@@ -221,19 +224,19 @@ 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 };
-    int[] twists = new int[8];
+    int[] twist = new int[8];
 
     for(int i=0; i<8; i++)
       {
       int color = mFaceColors[map[i]];
       int[] c = corners[retCornerPerm(i,perm)];
 
-           if( c[0]==color ) twists[i] = 0;
-      else if( c[1]==color ) twists[i] = 1;
-      else                   twists[i] = 2;
+           if( c[0]==color ) twist[i] = 0;
+      else if( c[1]==color ) twist[i] = 1;
+      else                   twist[i] = 2;
       }
 
-    TBSkewb.fillInQuats(quats,perm,twists);
+    TBSkewb.fillInQuats(quats,perm,twist);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -257,13 +260,7 @@ public class SolverSkewb extends SolverTablebase
     getCenters(object,centers);
     int result3 = checkAllCentersPresent(centers);
     if( result3<0 ) return result3;
-/*
-for(int i=0; i<8; i++)
-  for(int j=0; j<3; j++) android.util.Log.e("D", "corner "+i+" face "+j+" : "+corners[i][j]);
 
-for(int i=0; i<6; i++) android.util.Log.e("D", "center "+i+" : "+centers[i]);
-for(int i=0; i<6; i++) android.util.Log.e("D", "face "+i+" : "+mFaceColors[i]);
-*/
     if( !TablebaseHelpers.permutationIsEven(centers) ) return ERROR_TWO_CENTERS;
     int center_perm_num = TablebaseHelpers.computeEvenPermutationNum(centers);
 
@@ -272,12 +269,9 @@ for(int i=0; i<6; i++) android.util.Log.e("D", "face "+i+" : "+mFaceColors[i]);
 
     computeCornerQuats(quats,corners,freePerm);
     TBSkewb.computeCornerTwists(twist,quats);
-/*
-for(int i=0; i<4; i++) android.util.Log.e("D", "perm "+i+" : "+freePerm[i]);
-for(int i=0; i<8; i++) android.util.Log.e("D", "quat "+i+" : "+quats[i]);
-for(int i=0; i<8; i++) android.util.Log.e("D", "twist "+i+" : "+twist[i]);
-*/
-    int total = twist[1]+twist[2]+twist[4]+twist[7];
+
+    int total = 0;
+    for(int i=0; i<4; i++) total += twist[FREE[i]];
     if( (total%3)!=0 ) return ERROR_CORNER_TWISTED;
     int totalTwist = twist[0]+ 3*(twist[1]+ 3*(twist[2]+ 3*(twist[3]+ 3*(twist[4]+ 3*(twist[5]+ 3*twist[6])))));
 
@@ -399,15 +393,6 @@ for(int i=0; i<8; i++) android.util.Log.e("D", "twist "+i+" : "+twist[i]);
     if( mSolver==null )
       {
       mSolver = ImplementedTablebasesList.createPacked(res,ObjectSignatures.SKEW_2);
-/*
-      if( mSolver!=null )
-        {
-        mSolver.createTablebase(-1);
-        mSolver.pack();
-       //mSolver.test();
-        }
-
- */
       }
 
     return mSolver!=null ? mSolver.solution(index,null) : null;
