commit fbffa02ac30ffd77785a17f1d3066ee4046667d0
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Oct 11 23:47:47 2021 +0200

    Fix the Solver

diff --git a/src/main/java/org/distorted/solvers/SolverMain.java b/src/main/java/org/distorted/solvers/SolverMain.java
index eaeecf23..14dd65dd 100644
--- a/src/main/java/org/distorted/solvers/SolverMain.java
+++ b/src/main/java/org/distorted/solvers/SolverMain.java
@@ -106,124 +106,61 @@ public class SolverMain implements Runnable
 // (because the first implemented Solver - the two-phase Cube3 one - expects such order)
 //
 // Solved 3x3x3 Cube maps to "UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB"
-//
-// s : size of the cube; let index = a*s + b    (i.e. a,b = row,column)
-//
-// Up    :   index --> b<s-1 ? (s-1)*(s+4b)+a : 6*s*s -13*s +8 +a
-// Right :   index --> 6*s*s - 12*s + 7 - index
-// Front :   index --> if b==0  : s*s - 1 - index
-//                     if b==s-1: 6*s*s -11*s +6 - index
-//                     else
-//                         a==0: s*s + s-1 + 4*(b-1)*(s-1) + 2*(s-2) + s
-//                         else: s*s + s-1 + 4*(b-1)*(s-1) + 2*(s-1-a)
-// Down  :   index --> b==0 ? (s-1-a) : s*s + s-1 + 4*(b-1)*(s-1) - a
-// Left  :   index --> (s-1-a)*s + b
-// Back  :   index --> if b==s-1: s*(s-1-a)
-//                     if b==0  : 5*s*s -12*s + 8 + (s-1-a)*s
-//                     else
-//                        if a==s-1: s*s + 4*(s-2-b)*(s-1)
-//                        else     : s*s + 4*(s-2-b)*(s-1) + s + (s-2-a)*2
 
   private String prepareCube3position()
     {
     StringBuilder objectString = new StringBuilder();
-    int layers = 3;
-    int len = layers*layers;
-    int cubitIndex, row, col, color,face;
 
-    final int RIGHT= 0;
-    final int LEFT = 1;
-    final int UP   = 2;
-    final int DOWN = 3;
-    final int FRONT= 4;
-    final int BACK = 5;
+    final int R = 0;
+    final int L = 1;
+    final int U = 2;
+    final int D = 3;
+    final int F = 4;
+    final int B = 5;
 
     // 'I' - interior, theoretically can happen
     final char[] FACE_NAMES = { 'R', 'L', 'U', 'D', 'F', 'B', 'I'};
 
-    face = UP;
+    final int[] U_INDEX = { 2,10, 6,17,22,19, 3,11, 7};
+    final int[] R_INDEX = { 7,19, 6,15,20,14, 5,18, 4};
+    final int[] F_INDEX = { 3,11, 7,13,24,15, 1, 9, 5};
+    final int[] D_INDEX = { 1, 9, 5,16,23,18, 0, 8, 4};
+    final int[] L_INDEX = { 2,17, 3,12,21,13, 0,16, 1};
+    final int[] B_INDEX = { 6,10, 2,14,25,12, 4, 8, 0};
 
-    for(int i=0; i<len; i++)
+    for(int i=0; i<9; i++)
       {
-      row = i/layers;
-      col = i%layers;
-
-      cubitIndex = col<layers-1 ? (layers-1)*(layers+4*col) + row : 6*layers*layers - 13*layers + 8 + row;
-      color = mObject.getCubitFaceColorIndex(cubitIndex,face);
+      int color = mObject.getCubitFaceColorIndex(U_INDEX[i], i==4 ? F : U);
       objectString.append(FACE_NAMES[color]);
       }
-
-    face = RIGHT;
-
-    for(int i=0; i<len; i++)
+    for(int i=0; i<9; i++)
       {
-      cubitIndex = 6*layers*layers - 12*layers +7 - i;
-      color = mObject.getCubitFaceColorIndex(cubitIndex,face);
+      int color = mObject.getCubitFaceColorIndex(R_INDEX[i], i==4 ? F : R);
       objectString.append(FACE_NAMES[color]);
       }
-
-    face = FRONT;
-
-    for(int i=0; i<len; i++)
+    for(int i=0; i<9; i++)
       {
-      row = i/layers;
-      col = i%layers;
-
-      if( col==layers-1 ) cubitIndex = 6*layers*layers - 11*layers + 6 -i;
-      else if(   col==0 ) cubitIndex = layers*layers - 1 - i;
-      else
-        {
-        if( row==0 ) cubitIndex = layers*layers + layers-1 + 4*(col-1)*(layers-1) + 2*(layers-2) + layers;
-        else         cubitIndex = layers*layers + layers-1 + 4*(col-1)*(layers-1) + 2*(layers-1-row);
-        }
-
-      color = mObject.getCubitFaceColorIndex(cubitIndex,face);
+      int color = mObject.getCubitFaceColorIndex(F_INDEX[i], i==4 ? F : F);
       objectString.append(FACE_NAMES[color]);
       }
-
-    face = DOWN;
-
-    for(int i=0; i<len; i++)
+    for(int i=0; i<9; i++)
       {
-      row = i/layers;
-      col = i%layers;
-
-      cubitIndex = col==0 ? layers-1-row : layers*layers + layers-1 + 4*(col-1)*(layers-1) - row;
-      color = mObject.getCubitFaceColorIndex(cubitIndex,face);
+      int color = mObject.getCubitFaceColorIndex(D_INDEX[i], i==4 ? F : D);
       objectString.append(FACE_NAMES[color]);
       }
-
-    face = LEFT;
-
-    for(int i=0; i<len; i++)
+    for(int i=0; i<9; i++)
       {
-      row = i/layers;
-      col = i%layers;
-
-      cubitIndex = (layers-1-row)*layers + col;
-      color = mObject.getCubitFaceColorIndex(cubitIndex,face);
+      int color = mObject.getCubitFaceColorIndex(L_INDEX[i], i==4 ? F : L);
       objectString.append(FACE_NAMES[color]);
       }
-
-    face = BACK;
-
-    for(int i=0; i<len; i++)
+    for(int i=0; i<9; i++)
       {
-      row = i/layers;
-      col = i%layers;
-
-      if( col==layers-1 ) cubitIndex = layers*(layers-1-row);
-      else if(   col==0 ) cubitIndex = 5*layers*layers - 12*layers + 8 + (layers-1-row)*layers;
-      else
-        {
-        if( row==layers-1 ) cubitIndex = layers*layers + 4*(layers-2-col)*(layers-1);
-        else                cubitIndex = layers*layers + 4*(layers-2-col)*(layers-1) + layers + 2*(layers-2-row);
-        }
-
-      color = mObject.getCubitFaceColorIndex(cubitIndex,face);
+      int color = mObject.getCubitFaceColorIndex(B_INDEX[i], i==4 ? F : B);
       objectString.append(FACE_NAMES[color]);
       }
 
+android.util.Log.e("D", objectString.toString());
+
     return objectString.toString();
     }
 
