commit 55b2d967e3f27b0278231d24f934f2b1fcf4bf96
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sun Feb 26 22:05:55 2023 +0100

    Pyraminx solver: progress

diff --git a/src/main/java/org/distorted/solvers/SolverPyraminx.java b/src/main/java/org/distorted/solvers/SolverPyraminx.java
index 92623669..2f66ee3b 100644
--- a/src/main/java/org/distorted/solvers/SolverPyraminx.java
+++ b/src/main/java/org/distorted/solvers/SolverPyraminx.java
@@ -15,7 +15,9 @@ import org.distorted.main.R;
 import org.distorted.objectlib.main.ObjectType;
 import org.distorted.objectlib.main.TwistyObject;
 import org.distorted.objectlib.tablebases.ImplementedTablebasesList;
+import org.distorted.objectlib.tablebases.TablebaseHelpers;
 import org.distorted.objectlib.tablebases.TablebasesAbstract;
+import org.distorted.objectlib.tablebases.TablebasesPyraminx;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -43,6 +45,7 @@ public class SolverPyraminx extends SolverTablebase
   private static final int ERROR_CORNER_TWISTED   = -17;
   private static final int ERROR_EDGE_TWISTED     = -18;
   private static final int ERROR_C_V_DONT_MATCH   = -19;
+  private static final int ERROR_TWO_EDGES        = -20;
 
   TablebasesAbstract mSolver;
 
@@ -332,7 +335,10 @@ public class SolverPyraminx extends SolverTablebase
       }
 
     int[] quats = computeEdgeQuats(edges);
-
+    int[] permutation = new int[6];
+    TablebasesPyraminx.getEdgePermutation(permutation,quats);
+    boolean even = TablebaseHelpers.permutationIsEven(permutation);
+    if( !even ) return ERROR_TWO_EDGES;
 
     return 0;
     }
@@ -450,7 +456,7 @@ public class SolverPyraminx extends SolverTablebase
       case ERROR_CORNERS_CANNOT    : return res.getString(R.string.solver_generic_corners_cannot);
       case ERROR_VERTICES_CANNOT   : return res.getString(R.string.solver_generic_vertices_cannot);
       case ERROR_C_V_DONT_MATCH    : return res.getString(R.string.solver_generic_c_v_dont_match);
-
+      case ERROR_TWO_EDGES         : return res.getString(R.string.solver_generic_two_edges);
       }
 
     return null;
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index 9e4b7aa2..87dc258a 100755
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -83,6 +83,7 @@
     <string name="solver_generic_corner_twist">Eine Ecke muss verdreht werden!</string>
     <string name="solver_generic_edge_twist">Eine Kante muss verdreht werden!</string>
     <string name="solver_generic_two_centers">Zwei Zentren müssen ausgetauscht werden!</string>
+    <string name="solver_generic_two_edges">Zwei Randstücke müssen ausgetauscht werden!</string>
     <string name="solver_generic_missing_center">Die %1$s Mitte fehlt!</string>
     <string name="solver_generic_missing_corner">Die %1$s-%2$s-%3$s Ecke fehlt!</string>
     <string name="solver_generic_missing_vertex">Der %1$s-%2$s-%3$s Oktaeder fehlt!</string>
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index 89bef480..c8b79b54 100755
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -83,6 +83,7 @@
     <string name="solver_generic_corner_twist">¡Hay que torcer una esquina!</string>
     <string name="solver_generic_edge_twist">¡Hay que torcer una borde!</string>
     <string name="solver_generic_two_centers">¡Hay que cambiar dos centros!</string>
+    <string name="solver_generic_two_edges">¡Hay que cambiar dos piezas de borde!</string>
     <string name="solver_generic_missing_center">¡Falta el centro %1$s!</string>
     <string name="solver_generic_missing_corner">¡Falta la esquina %1$s-%2$s-%3$s!</string>
     <string name="solver_generic_missing_vertex">¡Falta el octaedro %1$s-%2$s-%3$s!</string>
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index 1762c9df..c970014f 100755
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -83,6 +83,7 @@
     <string name="solver_generic_corner_twist">Un coin doit être tourné !</string>
     <string name="solver_generic_edge_twist">Un bord doit être tourné !</string>
     <string name="solver_generic_two_centers">Deux centres doivent être échangés !</string>
+    <string name="solver_generic_two_edges">Deux pièces de bord doivent être échangées !</string>
     <string name="solver_generic_missing_center">Centre %1$s manquant !</string>
     <string name="solver_generic_missing_corner">Coin %1$s-%2$s-%3$s manquant !</string>
     <string name="solver_generic_missing_vertex">L\'octaèdre %1$s-%2$s-%3$s manque !</string>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index 0e13d1c6..023c0ab7 100755
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -84,6 +84,7 @@
     <string name="solver_generic_corner_twist">1 つのコーナーをねじる必要があります。</string>
     <string name="solver_generic_edge_twist">片方の端をひねる必要がある!</string>
     <string name="solver_generic_two_centers">2つのセンターを交換しなければならない!</string>
+    <string name="solver_generic_two_edges">2 つのエッジ ピースを交換する必要があります。</string>
     <string name="solver_generic_missing_center">%1$sのセンターが欠けてる！</string>
     <string name="solver_generic_missing_corner">%1$s%2$s%3$sのコーナーがない！</string>
     <string name="solver_generic_missing_vertex">%1$s-%2$s-%3$s八面体がありません！</string>
diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml
index 162a961e..327e958b 100755
--- a/src/main/res/values-ko/strings.xml
+++ b/src/main/res/values-ko/strings.xml
@@ -83,6 +83,7 @@
     <string name="solver_generic_corner_twist">한쪽 모서리를 비틀어야 합니다!</string>
     <string name="solver_generic_edge_twist">한쪽 가장자리를 비틀어야 합니다!</string>
     <string name="solver_generic_two_centers">두 개의 센터를 교환해야 합니다!</string>
+    <string name="solver_generic_two_edges">두 모서리 조각을 교환해야 합니다!</string>
     <string name="solver_generic_missing_center">%1$s 중앙이 사라졌습니다!</string>
     <string name="solver_generic_missing_corner">%1$s-%2$s-%3$s 모서리 금지!</string>
     <string name="solver_generic_missing_vertex">%1$s-%2$s-%3$s 팔면체가 없습니다!</string>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index ef19e8ff..a75b074f 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -83,6 +83,7 @@
     <string name="solver_generic_corner_twist">Jeden z rogów musi byc obrócony!</string>
     <string name="solver_generic_edge_twist">Jedna z krawędzi musi byc obrócona!</string>
     <string name="solver_generic_two_centers">Dwa środki muszą być wymienione!</string>
+    <string name="solver_generic_two_edges">Dwie krawędzie muszą być wymienione!</string>
     <string name="solver_generic_missing_center">Brakuje %1$s środka!</string>
     <string name="solver_generic_missing_corner">Brakuje %1$s-%2$s-%3$s rogu!</string>
     <string name="solver_generic_missing_vertex">Brakuje %1$s-%2$s-%3$s ośmiokątu!</string>
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index adfa7282..e7205e6c 100755
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -81,12 +81,13 @@
 
     <string name="solver_generic_not_implemented">Решебника для этого объекта и размера еще нет!</string>
     <string name="solver_generic_corner_twist">Один угол должен быть переставлен!</string>
-    <string name="solver_generic_edge_twist">Один край должен быть переставлен!</string>
+    <string name="solver_generic_edge_twist">Одно ребро должно быть переставлен!</string>
     <string name="solver_generic_two_centers">Два центра должны быть обменены!</string>
+    <string name="solver_generic_two_edges">Два ребра должны быть заменены!</string>
     <string name="solver_generic_missing_center">Нет %1$s центра!</string>
     <string name="solver_generic_missing_corner">Нет %1$s-%2$s-%3$s угла!</string>
     <string name="solver_generic_missing_vertex">Нет %1$s-%2$s-%3$s октаэдра!</string>
-    <string name="solver_generic_missing_edge">Нет %1$s-%2$s края!</string>
+    <string name="solver_generic_missing_edge">Нет %1$s-%2$s ребра!</string>
     <string name="solver_generic_corners_cannot">Углы нельзя скручивать так, чтобы все стороны были однотонными!</string>
     <string name="solver_generic_vertices_cannot">Восьмигранные фигуры нельзя скрутить так, чтобы все стороны были однотонными!</string>
     <string name="solver_generic_c_v_dont_match">Восьмигранные фигуры и четырехгранные углы не совпадают!</string>
diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml
index 212e7682..61f4ec1e 100644
--- a/src/main/res/values-zh-rCN/strings.xml
+++ b/src/main/res/values-zh-rCN/strings.xml
@@ -89,6 +89,7 @@
     <string name="solver_generic_corner_twist">一个角需要扭动！</string>
     <string name="solver_generic_edge_twist">一条边需要扭动！</string>
     <string name="solver_generic_two_centers">必须要交换两个中心！</string>
+    <string name="solver_generic_two_edges"></string>
     <string name="solver_generic_missing_center">%1$s中心不見了！</string>
     <string name="solver_generic_missing_corner">没有%1$s-%2$s-%3$s的角落！</string>
     <string name="solver_generic_missing_vertex">没有%1$s-%2$s-%3$s八面体！</string>
diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml
index 3d51a3b0..b0bbe934 100644
--- a/src/main/res/values-zh-rTW/strings.xml
+++ b/src/main/res/values-zh-rTW/strings.xml
@@ -83,6 +83,7 @@
     <string name="solver_generic_corner_twist">一個角需要扭動！</string>
     <string name="solver_generic_edge_twist">一個邊緣要扭動！</string>
     <string name="solver_generic_two_centers">兩個中鋒要互換！</string>
+    <string name="solver_generic_two_edges"></string>
     <string name="solver_generic_missing_center">%1$s的中心不见了！</string>
     <string name="solver_generic_missing_corner">沒有%1$s-%2$s-%3$s的角落!</string>
     <string name="solver_generic_missing_vertex">沒有%1$s-%2$s-%3$s八面體！</string>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index a6bb94e0..45bee1ee 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -103,6 +103,7 @@
     <string name="solver_generic_corner_twist">One corner has to be twisted!</string>
     <string name="solver_generic_edge_twist">One edge has to be twisted!</string>
     <string name="solver_generic_two_centers">Two centers have to be exchanged!</string>
+    <string name="solver_generic_two_edges">Two edges have to be exchanged!</string>
     <string name="solver_generic_missing_center">The %1$s center is missing!</string>
     <string name="solver_generic_missing_corner">The %1$s-%2$s-%3$s corner is missing!</string>
     <string name="solver_generic_missing_vertex">The %1$s-%2$s-%3$s octahedron piece is missing!</string>
