commit 083d854d2b3f98a74f2eaf4025d3f830940a91c8
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Mar 24 16:57:54 2023 +0100

    Dino6 solver: error detection should work fine now.

diff --git a/src/main/java/org/distorted/solvers/SolverDino6.java b/src/main/java/org/distorted/solvers/SolverDino6.java
index 124b7f09..ec2b6b60 100644
--- a/src/main/java/org/distorted/solvers/SolverDino6.java
+++ b/src/main/java/org/distorted/solvers/SolverDino6.java
@@ -58,21 +58,51 @@ public class SolverDino6 extends SolverTablebase
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int computeOpposite(int color, int[][] edges, boolean[] buffer)
+  private int computeOpposite(int color, int[][] edges)
     {
-    for(int i=0; i<6; i++) buffer[i] = false;
+    int[] buffer = new int[6];
+    for(int i=0; i<6; i++) buffer[i] = 0;
 
     for(int i=0; i<12; i++)
       {
-      int[] edge = edges[i];
-      if( edge[0]==color ) buffer[edge[1]]=true;
-      if( edge[1]==color ) buffer[edge[0]]=true;
+      int e0 = edges[i][0];
+      int e1 = edges[i][1];
+
+      if( e0==color && e1==color)
+        {
+        mErrorColor1 = color;
+        return ERROR_EDGE_MONOCHROMATIC;
+        }
+
+      if( e0==color )
+        {
+        buffer[e1]++;
+
+        if( buffer[e1]>1 )
+          {
+          mErrorColor1 = color;
+          mErrorColor2 = e1;
+          return ERROR_EDGE_TWICE;
+          }
+        }
+
+      if( e1==color )
+        {
+        buffer[e0]++;
+
+        if( buffer[e0]>1 )
+          {
+          mErrorColor1 = color;
+          mErrorColor2 = e0;
+          return ERROR_EDGE_TWICE;
+          }
+        }
       }
 
     int total = 0;
 
     for(int i=0; i<6; i++)
-      if( buffer[i] )
+      if( buffer[i]==1 )
         {
         if( i!=color) total++;
         else
@@ -84,7 +114,7 @@ public class SolverDino6 extends SolverTablebase
 
     if( total==4 )
       for(int i=0; i<6; i++)
-        if( !buffer[i] && i!=color ) return i;
+        if( buffer[i]==0 && i!=color ) return i;
 
     return ERROR_EDGE_CANNOT;
     }
@@ -152,7 +182,7 @@ public class SolverDino6 extends SolverTablebase
       if( !present[i] )
         {
         mErrorColor1 = i;
-        mErrorColor2 = (i<5 ? i+1 : 4 );
+        mErrorColor2 = (i<4 ? i+2 : i-2 );
         return ERROR_EDGE_MISSING;
         }
 
@@ -160,10 +190,10 @@ public class SolverDino6 extends SolverTablebase
 
     mFaceColors[4] = edges[0][0];
     mFaceColors[2] = edges[0][1];
-    mFaceColors[5] = computeOpposite(mFaceColors[4], edges, present);
+    mFaceColors[5] = computeOpposite(mFaceColors[4], edges);
     if( mFaceColors[5]<0 ) return mFaceColors[5];
 
-    mFaceColors[3] = computeOpposite(mFaceColors[2], edges, present);
+    mFaceColors[3] = computeOpposite(mFaceColors[2], edges);
     if( mFaceColors[3]<0 ) return mFaceColors[3];
 
     int success = fillUpRemainingFaceColors(present);
