commit e9bff328d246912b7714a32ef263971521b6e5a3
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Mar 21 15:02:33 2023 +0100

    Progess with Skewb solver.

diff --git a/src/main/java/org/distorted/objectlib/tablebases/ImplementedTablebasesList.java b/src/main/java/org/distorted/objectlib/tablebases/ImplementedTablebasesList.java
index eaf3f80a..afa9df64 100644
--- a/src/main/java/org/distorted/objectlib/tablebases/ImplementedTablebasesList.java
+++ b/src/main/java/org/distorted/objectlib/tablebases/ImplementedTablebasesList.java
@@ -28,6 +28,7 @@ public enum ImplementedTablebasesList
   CUBE2    (ObjectSignatures.CUBE_2, TBCube2.class),
   MIRR2    (ObjectSignatures.MIRR_2, TBCube2.class),
   JING2    (ObjectSignatures.JING_2, TBJing.class),
+  SKEW2    (ObjectSignatures.SKEW_2, TBSkewb.class),
   ;
 
   public static final int NUM_OBJECTS = values().length;
diff --git a/src/main/java/org/distorted/objectlib/tablebases/TBSkewb.java b/src/main/java/org/distorted/objectlib/tablebases/TBSkewb.java
new file mode 100644
index 00000000..5d563408
--- /dev/null
+++ b/src/main/java/org/distorted/objectlib/tablebases/TBSkewb.java
@@ -0,0 +1,127 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// 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;
+import org.distorted.objectlib.R;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class TBSkewb extends TablebasesAbstract
+{
+  public TBSkewb()
+    {
+    super();
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public TBSkewb(Resources res)
+    {
+    super(res, R.raw.pyra_3_tablebase);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int[][] getBasicAngles()
+    {
+    int[] tmp = {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[][]
+         {
+             { 1, 1, 1 },
+             { 1, 1,-1 },
+             { 1,-1, 1 },
+             { 1,-1,-1 },
+             {-1, 1, 1 },
+             {-1, 1,-1 },
+             {-1,-1, 1 },
+             {-1,-1,-1 },
+
+             { 0, 0, 1 },
+             { 0, 0,-1 },
+             { 0, 1, 0 },
+             { 0,-1, 0 },
+             { 1, 0, 0 },
+             {-1, 0, 0 }
+         };
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float[][] getCuts()
+    {
+    float[] cut = {0};
+    return new float[][] { cut,cut,cut,cut };
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  boolean[][] getRotatable()
+    {
+    boolean[] t1 = new boolean[] {false,true};
+    boolean[] t2 = new boolean[] {true,false};
+    return new boolean[][] { t1,t2,t2,t1 };
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// specifically for the tablebase
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getSize()
+    {
+    return 3149280;  // see https://www.jaapsch.net/puzzles/skewb.htm
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getMinScramble()
+    {
+    return 9;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int[] getQuats(int index)
+    {
+    return null;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getIndex(int[] quats)
+    {
+    return 0;
+    }
+}  
+
