commit 53a38b077ead96a4ee8f81180cbc9272661da760
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Apr 19 16:37:26 2023 +0200

    CU_323 solver: theoretically complete.

diff --git a/src/main/java/org/distorted/solvers/SolverCuboid323.java b/src/main/java/org/distorted/solvers/SolverCuboid323.java
index a1d32c9f..b40d8490 100644
--- a/src/main/java/org/distorted/solvers/SolverCuboid323.java
+++ b/src/main/java/org/distorted/solvers/SolverCuboid323.java
@@ -16,6 +16,7 @@ import org.distorted.objectlib.helpers.OperatingSystemInterface;
 import org.distorted.objectlib.main.ObjectSignatures;
 import org.distorted.objectlib.main.TwistyObject;
 import org.distorted.objectlib.tablebases.ImplementedTablebasesList;
+import org.distorted.objectlib.tablebases.TBCuboid323;
 import org.distorted.objectlib.tablebases.TablebaseHelpers;
 import org.distorted.objectlib.tablebases.TablebasesAbstract;
 
@@ -35,48 +36,8 @@ public class SolverCuboid323 extends SolverTablebase
   private boolean mUpper;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// if mUpper==true, then the edge3 is the 'half-fixed' front edge. Remove it from the permutation.
-// Otherwise edge1 is the one; remove it.
-
-  private int[] correctEdgePerm(int[] perm)
-    {
-    int val;
-    int[] ret = new int[7];
-
-    if( mUpper )
-      {
-      ret[0] = perm[0];
-      ret[1] = perm[1];
-      ret[2] = perm[2];
-      ret[3] = perm[4];
-      ret[4] = perm[5];
-      ret[5] = perm[6];
-      ret[6] = perm[7];
-
-      val = perm[3];
-      }
-    else
-      {
-      ret[0] = perm[0];
-      ret[1] = perm[2];
-      ret[2] = perm[3];
-      ret[3] = perm[4];
-      ret[4] = perm[5];
-      ret[5] = perm[6];
-      ret[6] = perm[7];
-
-      val = perm[1];
-      }
-
-    for(int i=0; i<7; i++)
-      if( ret[i]>val ) ret[i]--;
-
-    return ret;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// 0 or 1, depending on if the 'half-fixed' front edge is in its place or not.
-// if the 'half-fixed' edge is the upped front one ( i.e. mUpper==true) than it can be in its
+// true or false, depending on if the 'half-fixed' front edge is in its place or not.
+// if the 'half-fixed' edge is the upped front one (i.e. mUpper==true) than it can be in its
 // place or not; if mUpper==false it always must be in its place.
 
   private boolean isFrontEdgeInItsPlace(int[][] edges)
@@ -347,7 +308,7 @@ for(int i=0; i<6; i++) android.util.Log.e("D", "face color: "+mFaceColors[i]);
     TablebaseHelpers.displayTable(corner_perm, "CORNER PERM");
     TablebaseHelpers.displayTable(edge_perm, "EDGE PERM");
 
-    int[] edge_perm2 = correctEdgePerm(edge_perm); // edge1 (lower) or edge3 (upper) is fixed!
+    int[] edge_perm2 = TBCuboid323.edgePermTo7(edge_perm,mUpper); // edge1 (lower) or edge3 (upper) is fixed!
 
     int corner_perm_num = TablebaseHelpers.computePermutationNum(corner_perm);
     int edge_perm_num = TablebaseHelpers.computePermutationNum(edge_perm2);
@@ -355,6 +316,8 @@ for(int i=0; i<6; i++) android.util.Log.e("D", "face color: "+mFaceColors[i]);
 
 android.util.Log.e("D", "corner_perm_num: "+corner_perm_num+" edge_perm_num: "+edge_perm_num+" inPlace: "+inPlace);
 
+    TBCuboid323.setUpper(mUpper);
+
     return corner_perm_num + 20160*( (inPlace?0:1) + 2*edge_perm_num);
     }
 
