commit f702f4efe517a0a818eb0af49ac8c38366684675
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Aug 1 00:37:23 2022 +0200

    Make error reporting in the Solver a bit better.

diff --git a/src/main/java/org/distorted/solvers/SolverMain.java b/src/main/java/org/distorted/solvers/SolverMain.java
index d5d5eab1..652c95f7 100644
--- a/src/main/java/org/distorted/solvers/SolverMain.java
+++ b/src/main/java/org/distorted/solvers/SolverMain.java
@@ -26,6 +26,7 @@ public class SolverMain implements Runnable
   private final Resources mRes;
   private final TwistyObject mObject;
   private final long mSignature;
+  private int mColorID;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -66,28 +67,39 @@ public class SolverMain implements Runnable
 
     SolverSearch.prepare(mRes);
     String objectPosition = prepareCube3position();
-    result = SolverSearch.solution(objectPosition, 24, 20);
+    int check = checkPosition(objectPosition);
 
-    if (result.contains("Error"))
+    if( check<0 )
       {
-      switch (result.charAt(result.length() - 1))
+      result = SolverSearch.solution(objectPosition, 24, 20);
+
+      if (result.contains("Error"))
         {
-        case '1': result = mRes.getString(R.string.solver_cube3_error1); break;
-        case '2': result = mRes.getString(R.string.solver_cube3_error2); break;
-        case '3': result = mRes.getString(R.string.solver_cube3_error3); break;
-        case '4': result = mRes.getString(R.string.solver_cube3_error4); break;
-        case '5': result = mRes.getString(R.string.solver_cube3_error5); break;
-        case '6': result = mRes.getString(R.string.solver_cube3_error6); break;
-        case '7': result = mRes.getString(R.string.solver_cube3_error7); break;
-        case '8': result = mRes.getString(R.string.solver_cube3_error8); break;
-        case '9': result = mRes.getString(R.string.solver_cube3_error9); break;
+        switch (result.charAt(result.length() - 1))
+          {
+          case '1': result = mRes.getString(R.string.solver_cube3_error1); break;
+          case '2': result = mRes.getString(R.string.solver_cube3_error2); break;
+          case '3': result = mRes.getString(R.string.solver_cube3_error3); break;
+          case '4': result = mRes.getString(R.string.solver_cube3_error4); break;
+          case '5': result = mRes.getString(R.string.solver_cube3_error5); break;
+          case '6': result = mRes.getString(R.string.solver_cube3_error6); break;
+          case '7': result = mRes.getString(R.string.solver_cube3_error7); break;
+          case '8': result = mRes.getString(R.string.solver_cube3_error8); break;
+          case '9': result = mRes.getString(R.string.solver_cube3_error9); break;
+          }
+
+        solver.displayErrorDialog(result);
+        }
+      else
+        {
+        solver.setSolved(result);
         }
-
-      solver.displayErrorDialog(result);
       }
     else
       {
-      solver.setSolved(result);
+      String color = mRes.getString(mColorID);
+      result = mRes.getString(R.string.solver_cube3_error1,check,color);
+      solver.displayErrorDialog(result);
       }
     }
 
@@ -128,6 +140,38 @@ public class SolverMain implements Runnable
     return -1;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private int checkPosition(String position)
+    {
+    int[] numColors = new int[6];
+    int len = position.length();
+
+    for(int i=0; i<len; i++)
+      {
+      char ch = position.charAt(i);
+
+      switch(ch)
+        {
+        case 'R': numColors[0]++; break;
+        case 'L': numColors[1]++; break;
+        case 'U': numColors[2]++; break;
+        case 'D': numColors[3]++; break;
+        case 'F': numColors[4]++; break;
+        case 'B': numColors[5]++; break;
+        }
+      }
+
+    if( numColors[0]<9 ) { mColorID = R.string.color_yellow; return numColors[0]; }
+    if( numColors[1]<9 ) { mColorID = R.string.color_white ; return numColors[1]; }
+    if( numColors[2]<9 ) { mColorID = R.string.color_blue  ; return numColors[2]; }
+    if( numColors[3]<9 ) { mColorID = R.string.color_green ; return numColors[3]; }
+    if( numColors[4]<9 ) { mColorID = R.string.color_red   ; return numColors[4]; }
+    if( numColors[5]<9 ) { mColorID = R.string.color_orange; return numColors[5]; }
+
+    return -1;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // order: Up --> Right --> Front --> Down --> Left --> Back
 // (because the first implemented Solver - the two-phase Cube3 one - expects such order)
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index 40e73b15..78c0387f 100755
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -70,7 +70,7 @@
 
     <string name="solver_generic_error1">Löser für dieses Objekt und diese Größe noch nicht implementiert!</string>
 
-    <string name="solver_cube3_error1">Es gibt nicht genau 9 Facelets jeder Farbe!</string>
+    <string name="solver_cube3_error1">Es gibt nur %1$d %2$s Facelets.</string>
     <string name="solver_cube3_error2">Nicht alle 12 Kanten gibt es genau einmal!</string>
     <string name="solver_cube3_error3">Eine Kante muss umgedreht werden!</string>
     <string name="solver_cube3_error4">Nicht alle 8 Ecken gibt es genau einmal!</string>
@@ -80,6 +80,13 @@
     <string name="solver_cube3_error8">Zeitüberschreitung. Keine Lösung in 20 Sekunden gefunden!</string>
     <string name="solver_cube3_error9">Löser unterbrochen!</string>
 
+    <string name="color_yellow">gelbe</string>
+    <string name="color_white">weiße</string>
+    <string name="color_blue">blaue</string>
+    <string name="color_green">grüne</string>
+    <string name="color_red">rote</string>
+    <string name="color_orange">orange</string>
+
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">Level %1$d</string>
     <string name="tm_placeholder">%1$02d:%2$02d</string>
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index ef5b67c1..6ba3426e 100755
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -70,7 +70,7 @@
 
     <string name="solver_generic_error1">¡Aún no se implementado el solucionador para este objeto y tamaño!</string>
 
-    <string name="solver_cube3_error1">¡No hay exactamente 9 facelets de cada color!</string>
+    <string name="solver_cube3_error1">Solo hay %1$d facetas %2$s.</string>
     <string name="solver_cube3_error2">¡No todos los 12 bordes existen exactamente una vez!</string>
     <string name="solver_cube3_error3">¡Un borde tiene que voltearse!</string>
     <string name="solver_cube3_error4">¡No todas las 8 esquinas existen exactamente una vez!</string>
@@ -80,6 +80,13 @@
     <string name="solver_cube3_error8">¡Tiempo de espera agotado, no se encontró ninguna solución en 20 segundos!</string>
     <string name="solver_cube3_error9">¡Solucionador interrumpido!</string>
 
+    <string name="color_yellow">amarillas</string>
+    <string name="color_white">blancos</string>
+    <string name="color_blue">azules</string>
+    <string name="color_green">verdes</string>
+    <string name="color_red">rojos</string>
+    <string name="color_orange">naranjas</string>
+
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">Nivel %1$d</string>
     <string name="tm_placeholder">%1$02d:%2$02d</string>
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index fefe63d3..2181d3cb 100755
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -70,7 +70,7 @@
 
     <string name="solver_generic_error1">Solutionneur pour cet objet et cette taille non encore mis en place !</string>
 
-    <string name="solver_cube3_error1">Il n\'y a pas exactement 9 facettes de chaque couleur !</string>
+    <string name="solver_cube3_error1">Il n\'y a que %1$d facettes %2$s.</string>
     <string name="solver_cube3_error2">Les 12 arêtes n\'existent pas exactement une fois !</string>
     <string name="solver_cube3_error3">Une arête doit être inversée !</string>
     <string name="solver_cube3_error4">Les 8 coins n\'existent pas tous une seule fois !</string>
@@ -80,6 +80,13 @@
     <string name="solver_cube3_error8">Temps imparti, aucune solution trouvée en 20 secondes !</string>
     <string name="solver_cube3_error9">Solutionneur interrompu !</string>
 
+    <string name="color_yellow">jaunes</string>
+    <string name="color_white">blanches</string>
+    <string name="color_blue">bleues</string>
+    <string name="color_green">vertes</string>
+    <string name="color_red">rouges</string>
+    <string name="color_orange">orange</string>
+
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">Niveau %1$d</string>
     <string name="tm_placeholder">%1$02d:%2$02d</string>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index 1da2387c..c939ec1c 100755
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -70,7 +70,7 @@
 
     <string name="solver_generic_error1">このオブジェクトとサイズのソルバーはまだ実装されていません！</string>
 
-    <string name="solver_cube3_error1">各色には 9 つのフェイスレットはありません。</string>
+    <string name="solver_cube3_error1">%2$s小顔は%1$dつだけ</string>
     <string name="solver_cube3_error2">12 のエッジすべてが 存在するわけではありません。</string>
     <string name="solver_cube3_error3">1 つのエッジを反転する必要があります！</string>
     <string name="solver_cube3_error4">8 つのコーナーすべてが存在するわけではありません！</string>
@@ -80,6 +80,13 @@
     <string name="solver_cube3_error8">タイムアウトです。20 秒では解答は見つかりません！</string>
     <string name="solver_cube3_error9">ソルバーが中断されました！</string>
 
+    <string name="color_yellow">黄色い</string>
+    <string name="color_white">白い</string>
+    <string name="color_blue">青い</string>
+    <string name="color_green">緑の</string>
+    <string name="color_red">赤い</string>
+    <string name="color_orange">オレンジ色の</string>
+
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">レベル %1$d</string>
     <string name="tm_placeholder">%1$02d：%2$02d</string>
diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml
index 927e76d4..99b13b1e 100755
--- a/src/main/res/values-ko/strings.xml
+++ b/src/main/res/values-ko/strings.xml
@@ -70,7 +70,7 @@
 
     <string name="solver_generic_error1">아직 구현되지 않은 이 개체 및 크기에 대한 해결사!</string>
 
-    <string name="solver_cube3_error1">각 색상마다 정확히 9개의 페이스렛이 없습니다!</string>
+    <string name="solver_cube3_error1">%2$s작은 얼굴은  %1$d개뿐입니다.</string>
     <string name="solver_cube3_error2">12개의 가장자리 모두가 정확하게 한 번 존재하지 않습니다!</string>
     <string name="solver_cube3_error3">한쪽 가장자리를 뒤집어야 합니다!</string>
     <string name="solver_cube3_error4">8개의 모서리 모두가 정확하게 한 번 존재하지 않습니다!</string>
@@ -80,6 +80,13 @@
     <string name="solver_cube3_error8">시간 초과, 20초 안에 해답이 발견되지 않았습니다!</string>
     <string name="solver_cube3_error9">해결사가 중단되었습니다!</string>
 
+    <string name="color_yellow">노란색</string>
+    <string name="color_white">하얀</string>
+    <string name="color_blue">파란색</string>
+    <string name="color_green">녹색의</string>
+    <string name="color_red">빨간</string>
+    <string name="color_orange">주황색</string>
+
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">레벨 %1$d</string>
     <string name="tm_placeholder">%1$02d:%2$02d</string>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index 713f6764..bde4a821 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -70,7 +70,7 @@
 
     <string name="solver_generic_error1">Rozwiązywacz takiego obiektu jest jeszcze nie zaimplementowany!</string>
 
-    <string name="solver_cube3_error1">Nie ma dokładnie 9 ścian w każdym kolorze!</string>
+    <string name="solver_cube3_error1">Jest tylko %1$d %2$s ścian.</string>
     <string name="solver_cube3_error2">Któraś z 12 krawędzi nie istnieje!</string>
     <string name="solver_cube3_error3">Jedna z krawędzi musi być odwrócona!</string>
     <string name="solver_cube3_error4">Jeden z 8 rogów nie istnieje!</string>
@@ -80,6 +80,13 @@
     <string name="solver_cube3_error8">Minęło 20 sekund i rozwiązanie nie zostało znalezione!</string>
     <string name="solver_cube3_error9">Rozwiązywacz przerwany!</string>
 
+    <string name="color_yellow">żółtych</string>
+    <string name="color_white">białych</string>
+    <string name="color_blue">niebieskich</string>
+    <string name="color_green">zielonych</string>
+    <string name="color_red">czerwonych</string>
+    <string name="color_orange">pomarańczowych</string>
+
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">Poziom %1$d</string>
     <string name="tm_placeholder">%1$02d:%2$02d</string>
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index 3ba69dfa..7d1ff811 100755
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -70,7 +70,7 @@
 
     <string name="solver_generic_error1">Решебника для этого объекта и размера еще нет!</string>
 
-    <string name="solver_cube3_error1">Отсутствует точно 9 граней каждого цвета!</string>
+    <string name="solver_cube3_error1">Всего %1$d %2$s граней!</string>
     <string name="solver_cube3_error2">Не все 12 ребер существуют в единичном экземпляре!</string>
     <string name="solver_cube3_error3">Надо перевернуть одно ребро!</string>
     <string name="solver_cube3_error4">Не все 8 углов существуют в единичном экземпляре!</string>
@@ -79,6 +79,13 @@
     <string name="solver_cube3_error7">Не существует решения для данного максимального числа ходов!</string>
     <string name="solver_cube3_error8">Время вышло: решение не найдено в течение 20 секунд!</string>
     <string name="solver_cube3_error9">Решебник прерван!</string>
+]
+    <string name="color_yellow">желтых</string>
+    <string name="color_white">белых</string>
+    <string name="color_blue">синих</string>
+    <string name="color_green">зеленых</string>
+    <string name="color_red">красных</string>
+    <string name="color_orange">оранжевых</string>
 
     <string name="ms_placeholder">%1$d мс</string>
     <string name="lv_placeholder">Уровень %1$d</string>
diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml
index 7e3acbb2..3b50e5b2 100644
--- a/src/main/res/values-zh-rCN/strings.xml
+++ b/src/main/res/values-zh-rCN/strings.xml
@@ -76,7 +76,7 @@
 
     <string name="solver_generic_error1">此对象和尺寸的求解器尚未实现！</string>
 
-    <string name="solver_cube3_error1">每种颜色并非全有9个小面！</string>
+    <string name="solver_cube3_error1">只有%1$d个%2$s小面</string>
     <string name="solver_cube3_error2">并非所有12条边都只存在一次！</string>
     <string name="solver_cube3_error3">一条边需要翻转！</string>
     <string name="solver_cube3_error4">并非所有8个角都只存在一次！</string>
@@ -86,6 +86,13 @@
     <string name="solver_cube3_error8">超时，20秒内未找到解决方案！</string>
     <string name="solver_cube3_error9">求解器中断！</string>
 
+    <string name="color_yellow">黄色的</string>
+    <string name="color_white">白色的</string>
+    <string name="color_blue">蓝色的</string>
+    <string name="color_green">绿色的</string>
+    <string name="color_red">红色的</string>
+    <string name="color_orange">橙色的</string>
+
     <string name="ms_placeholder">%1$d 毫秒</string>
     <string name="lv_placeholder">级别 %1$d</string>
     <string name="tm_placeholder">%1$02d:%2$02d</string>
diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml
index d18b855e..8e2da0db 100644
--- a/src/main/res/values-zh-rTW/strings.xml
+++ b/src/main/res/values-zh-rTW/strings.xml
@@ -70,7 +70,7 @@
 
     <string name="solver_generic_error1">此對象和尺寸的求解器尚未實現！</string>
 
-    <string name="solver_cube3_error1">每種颜色並非全有9個小面！</string>
+    <string name="solver_cube3_error1">只有%1$d個%2$s小臉</string>
     <string name="solver_cube3_error2">並非所有12條邊都只存在一次！</string>
     <string name="solver_cube3_error3">一條邊需要翻轉！</string>
     <string name="solver_cube3_error4">並非所有8個角都只存在一次！</string>
@@ -80,6 +80,13 @@
     <string name="solver_cube3_error8">超時，20秒内未找到解决方案！</string>
     <string name="solver_cube3_error9">求解器中斷！</string>
 
+    <string name="color_yellow">黃色的</string>
+    <string name="color_white">白色的</string>
+    <string name="color_blue">藍色的</string>
+    <string name="color_green">綠色的</string>
+    <string name="color_red">紅色的</string>
+    <string name="color_orange">橙色的</string>
+
     <string name="ms_placeholder">%1$d 毫秒</string>
     <string name="lv_placeholder">級別 %1$d</string>
     <string name="tm_placeholder">%1$02d:%2$02d</string>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 4cc106b5..95246a2a 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -90,7 +90,7 @@
     <string name="opengl_error_text" translatable="false">This device does not support OpenGL 3.0</string>
 
     <string name="solver_generic_error1">Solver for this object and size not implemented yet!</string>
-    <string name="solver_cube3_error1">There are not exactly 9 facelets of each color!</string>
+    <string name="solver_cube3_error1">There are only %1$d %2$s facelets.</string>
     <string name="solver_cube3_error2">Not all 12 edges exist exactly once!</string>
     <string name="solver_cube3_error3">One edge has to be flipped!</string>
     <string name="solver_cube3_error4">Not all 8 corners exist exactly once!</string>
@@ -100,6 +100,13 @@
     <string name="solver_cube3_error8">Timeout, no solution found in 20 seconds!</string>
     <string name="solver_cube3_error9">Solver interrupted!</string>
 
+    <string name="color_yellow">yellow</string>
+    <string name="color_white">white</string>
+    <string name="color_blue">blue</string>
+    <string name="color_green">green</string>
+    <string name="color_red">red</string>
+    <string name="color_orange">orange</string>
+
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">Level %1$d</string>
     <string name="tm_placeholder">%1$02d:%2$02d</string>
