commit 76de8309e9bbd51e243e5c55794fee38bb69a8e3
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/objectlib/objects/TwistyDino.java b/src/main/java/org/distorted/objectlib/objects/TwistyDino.java
index e703facc..577a513f 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyDino.java
@@ -237,9 +237,7 @@ abstract class TwistyDino extends ShapeHexahedron
     {
     if( mBasicAngle==null )
       {
-      int num = getNumLayers()[0];
-      int[] tmp = new int[num];
-      for(int i=0; i<num; i++) tmp[i] = 3;
+      int[] tmp = {3,3,3};
       mBasicAngle = new int[][] { tmp,tmp,tmp,tmp };
       }
 
diff --git a/src/main/java/org/distorted/objectlib/tablebases/TBDino6.java b/src/main/java/org/distorted/objectlib/tablebases/TBDino6.java
new file mode 100644
index 00000000..f2be8907
--- /dev/null
+++ b/src/main/java/org/distorted/objectlib/tablebases/TBDino6.java
@@ -0,0 +1,131 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2023 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Magic Cube.                                                              //
+//                                                                                               //
+// Magic Cube is proprietary software licensed under an EULA which you should have received      //
+// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.objectlib.tablebases;
+
+import static org.distorted.objectlib.main.TwistyObject.SQ3;
+
+import android.content.res.Resources;
+
+import org.distorted.library.type.Static3D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class TBDino6 extends TablebasesAbstract
+{
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public TBDino6()
+    {
+    super();
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public TBDino6(Resources res)
+    {
+    super(res,org.distorted.objectlib.R.raw.pduo_2_tablebase);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int[][] getBasicAngles()
+    {
+    int[] tmp = {3,3,3};
+    return new int[][] { tmp,tmp,tmp,tmp };
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  Static3D[] getRotationAxis()
+    {
+    return new Static3D[]
+         {
+           new Static3D( SQ3/3, SQ3/3, SQ3/3),
+           new Static3D( SQ3/3, SQ3/3,-SQ3/3),
+           new Static3D( SQ3/3,-SQ3/3, SQ3/3),
+           new Static3D( SQ3/3,-SQ3/3,-SQ3/3)
+         };
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float[][] getPosition()
+    {
+    return new float[][]
+         {
+             { 0.0f, 1.5f, 1.5f },
+             { 1.5f, 0.0f, 1.5f },
+             { 0.0f,-1.5f, 1.5f },
+             {-1.5f, 0.0f, 1.5f },
+             { 1.5f, 1.5f, 0.0f },
+             { 1.5f,-1.5f, 0.0f },
+             {-1.5f,-1.5f, 0.0f },
+             {-1.5f, 1.5f, 0.0f },
+             { 0.0f, 1.5f,-1.5f },
+             { 1.5f, 0.0f,-1.5f },
+             { 0.0f,-1.5f,-1.5f },
+             {-1.5f, 0.0f,-1.5f }
+         };
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float[][] getCuts()
+    {
+    float[] cut = new float[] { -SQ3/3, SQ3/3 };
+    return new float[][] { cut,cut,cut,cut };
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  boolean[][] getRotatable()
+    {
+    boolean[] tmp = new boolean[] {true,false,true};
+    return new boolean[][] { tmp,tmp,tmp,tmp };
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// specifically for the tablebase
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getSize()
+    {
+    return 19958400;  // see https://www.jaapsch.net/puzzles/dinocube.htm
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getMinScramble()
+    {
+    return 9;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static int getIndexFromPerm(int[] perm)
+    {
+    return 0;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int[] getQuats(int index)
+    {
+    return null;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getIndex(int[] quats)
+    {
+    return 0;
+    }
+}  
+
