commit 742401b4e366f1160e8ef79dde878435fb94abd4
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Mar 24 17:35:28 2023 +0100

    Dino6 solver: skeleton tablebase class.

diff --git a/src/main/java/org/distorted/solvers/SolverDino6.java b/src/main/java/org/distorted/solvers/SolverDino6.java
index ec2b6b60..613f7283 100644
--- a/src/main/java/org/distorted/solvers/SolverDino6.java
+++ b/src/main/java/org/distorted/solvers/SolverDino6.java
@@ -15,6 +15,8 @@ import org.distorted.main.R;
 import org.distorted.objectlib.main.ObjectSignatures;
 import org.distorted.objectlib.main.TwistyObject;
 import org.distorted.objectlib.tablebases.ImplementedTablebasesList;
+import org.distorted.objectlib.tablebases.TBDino6;
+import org.distorted.objectlib.tablebases.TablebaseHelpers;
 import org.distorted.objectlib.tablebases.TablebasesAbstract;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -26,6 +28,7 @@ public class SolverDino6 extends SolverTablebase
   private static final int ERROR_EDGE_TWISTED        = -3;
   private static final int ERROR_EDGE_MONOCHROMATIC  = -4;
   private static final int ERROR_EDGE_TWICE          = -5;
+  private static final int ERROR_TWO_EDGES           = -6;
 
   int[][] EDGE_MAP = {
                       {4,2},{0,4},{4,3},{1,4},
@@ -275,6 +278,37 @@ public class SolverDino6 extends SolverTablebase
     return 0;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private int getPerm(int face0, int face1, int[][] edges)
+    {
+    int c0=mFaceColors[face0];
+    int c1=mFaceColors[face1];
+
+    for(int i=0; i<12; i++)
+      {
+      int[] edge = edges[i];
+      if( edge[0]==c0 && edge[1]==c1 ) return i;
+      }
+
+    return -1;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private int computePermutation(int[][] edges, int[] perm)
+    {
+    for(int i=0; i<12; i++)
+      {
+      int[] map = EDGE_MAP[i];
+      int m1 = map[0];
+      int m2 = map[1];
+      perm[i] = getPerm(m1,m2,edges);
+      }
+
+    return 0;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int tablebaseIndex(TwistyObject object)
@@ -285,18 +319,19 @@ public class SolverDino6 extends SolverTablebase
     int result1 = figureOutFaceColors(edges);
     if( result1<0 ) return result1;
 
-for(int i=0; i<6; i++)
-  {
-  android.util.Log.e("D", "face "+i+" : "+mFaceColors[i]);
-  }
-
     int result2 = checkAllPresent(edges);
     if( result2<0 ) return result2;
 
     int result3 = checkTwist(edges);
     if( result3<0 ) return result3;
 
-    return 0;
+    int[] perm = new int[12];
+    int result4 = computePermutation(edges,perm);
+    if( result4<0 ) return result4;
+
+    if( !TablebaseHelpers.permutationIsEven(perm) ) return ERROR_TWO_EDGES;
+
+    return TBDino6.getIndexFromPerm(perm);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -394,6 +429,7 @@ for(int i=0; i<6; i++)
       case ERROR_EDGE_MONOCHROMATIC: return edgeMonoError(res,mErrorColor1);
       case ERROR_EDGE_TWICE        : return edgeTwiceError(res,mErrorColor1,mErrorColor2);
       case ERROR_EDGE_CANNOT       : return res.getString(R.string.solver_generic_edges_cannot);
+      case ERROR_TWO_EDGES         : return res.getString(R.string.solver_generic_two_edges);
       }
 
     return null;
