commit 11e67fa5fb313a81ac5e2de8b7a26f5aa3e2a381
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri May 26 12:27:41 2023 +0200

    Fix SkewbDiamond solver - previously some impossible positions slipped through.

diff --git a/src/main/java/org/distorted/solvers/SolverSkewbDiamond.java b/src/main/java/org/distorted/solvers/SolverSkewbDiamond.java
index 0e7ae9ef..6ec6d80c 100644
--- a/src/main/java/org/distorted/solvers/SolverSkewbDiamond.java
+++ b/src/main/java/org/distorted/solvers/SolverSkewbDiamond.java
@@ -41,8 +41,9 @@ public class SolverSkewbDiamond extends SolverTablebase
 
   private static final int ERROR_TWO_CORNERS      = -15;
   private static final int ERROR_TWO_CENTERS      = -16;
-  private static final int ERROR_CORNER_TWIST     = -17;
-  private static final int ERROR_CORNERS_CANNOT   = -18;
+  private static final int ERROR_CORNER_TWIST_90  = -17;
+  private static final int ERROR_CORNER_TWIST_180 = -18;
+  private static final int ERROR_CORNERS_CANNOT   = -19;
 
   private TablebasesAbstract mSolver;
   private final int[] mFaceColors;
@@ -142,12 +143,22 @@ public class SolverSkewbDiamond extends SolverTablebase
   private int getTotalTwist(int[] twist)
     {
     int total = 0;
+    boolean even = true;
 
     for(int i=0; i<6; i++)
       {
       int t= twist[i];
-      if( t==1 || t==3 ) return -1;
-      if( i<5 && t==2 ) total+=(1<<i);
+
+      if( t==1 || t==3 ) return ERROR_CORNER_TWIST_90;
+      if( t==2 )
+        {
+        if( i<5 )
+          {
+          total+=(1<<i);
+          even = !even;
+          }
+        else if( even ) return ERROR_CORNER_TWIST_180;
+        }
       }
 
     return total;
@@ -372,7 +383,7 @@ android.util.Log.e("D", "corn twist: "+corners_twist[0]+" "+corners_twist[1]+" "
 +corners_twist[3]+" "+corners_twist[4]+" "+corners_twist[5]);
 */
     int totalTwist = getTotalTwist(corners_twist);
-    if( totalTwist<0 ) return ERROR_CORNER_TWIST;
+    if( totalTwist<0 ) return totalTwist;
 
     int corners_perm_num = TablebaseHelpers.computeEvenPermutationNum(corners_perm);
     int centers_perm_num = TablebaseHelpers.computeEvenPermutationNum(free_centers_perm);
@@ -478,7 +489,8 @@ android.util.Log.e("D", "corn twist: "+corners_twist[0]+" "+corners_twist[1]+" "
 
       case ERROR_TWO_CORNERS      : return res.getString(R.string.solver_generic_two_corners);
       case ERROR_TWO_CENTERS      : return res.getString(R.string.solver_generic_two_centers);
-      case ERROR_CORNER_TWIST     : return res.getString(R.string.solver_generic_corner_twist);
+      case ERROR_CORNER_TWIST_90  : return res.getString(R.string.solver_generic_corner_twist) + " (90)";
+      case ERROR_CORNER_TWIST_180 : return res.getString(R.string.solver_generic_corner_twist) + " (180)";
       case ERROR_CORNERS_CANNOT   : return res.getString(R.string.solver_generic_corners_cannot);
       }
 
