Project

General

Profile

« Previous | Next » 

Revision 998300d8

Added by Leszek Koltunski 10 months ago

Abstract out Solver3x3Beginner - the first implemented Phased Solver.

View differences:

src/main/java/org/distorted/objectlib/algsolvers/SolvedObject.java
58 58

  
59 59
///////////////////////////////////////////////////////////////////////////////////////////////////
60 60

  
61
  public int[][] getMoveTable()            { return mMoveTable; }
61
  public int[][] getMoveTable()
62
    {
63
    return mMoveTable;
64
    }
65

  
66
///////////////////////////////////////////////////////////////////////////////////////////////////
67

  
68
  public int findMove(int ax, int row, int angle)
69
    {
70
    int num = mMoveTable.length;
71
    int basicAngle = mBasicAngles[ax][row];
72

  
73
    for( int m=0; m<num; m++)
74
      {
75
      int[] move = mMoveTable[m];
76
      if( ax==move[0] && row==move[1] && ((angle-move[2])%basicAngle)==0 ) return m;
77
      }
78

  
79
    return -1;
80
    }
81

  
82
///////////////////////////////////////////////////////////////////////////////////////////////////
83

  
84
  public int[] findMove(int index)
85
    {
86
    return mMoveTable[index];
87
    }
62 88

  
63 89
///////////////////////////////////////////////////////////////////////////////////////////////////
64 90

  
src/main/java/org/distorted/objectlib/algsolvers/implemented/Solver3x3Beginner.java
1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2024 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8
///////////////////////////////////////////////////////////////////////////////////////////////////
9

  
10
package org.distorted.objectlib.algsolvers.implemented;
11

  
12
import org.distorted.library.type.Static3D;
13
import org.distorted.objectlib.algsolvers.*;
14

  
15
///////////////////////////////////////////////////////////////////////////////////////////////////
16

  
17
public class Solver3x3Beginner  
18
{
19
  private final SolvedObject mObject;
20
  private final SolverPhased mSolver;
21
  
22
///////////////////////////////////////////////////////////////////////////////////////////////////
23
  
24
  public Solver3x3Beginner()
25
    {
26
    float A = 1.0f;
27
    float B = 0.0f;
28
    
29
    float[][] pos   = new float[][]
30
                       {
31
                               {-A,-A,-A},
32
                               {-A,-A, A},
33
                               {-A, A,-A},
34
                               {-A, A, A},
35
                               { A,-A,-A},
36
                               { A,-A, A},
37
                               { A, A,-A},
38
                               { A, A, A},
39

  
40
                               { B,-A,-A},
41
                               { B,-A, A},
42
                               { B, A,-A},
43
                               { B, A, A},
44
                               {-A, B,-A},
45
                               {-A, B, A},
46
                               { A, B,-A},
47
                               { A, B, A},
48
                               {-A,-A, B},
49
                               {-A, A, B},
50
                               { A,-A, B},
51
                               { A, A, B},
52

  
53
                               { A, B, B},
54
                               {-A, B, B},
55
                               { B, A, B},
56
                               { B,-A, B},
57
                               { B, B, A},
58
                               { B, B,-A}
59
                       };        
60
    
61
    Static3D[] axis = new Static3D[] { new Static3D(1,0,0), new Static3D(0,1,0), new Static3D(0,0,1) };
62
    int[] a = new int[] {4,4,4};
63
    int[][] angles  = new int[][] { a,a,a };
64
    float[] c = new float[] {-0.5f,0.5f};
65
    float[][] cuts  = new float[][] {c,c,c};
66
    boolean[] r = {true,false,true};
67
    boolean[][] rot = {r,r,r};
68

  
69
    mObject = new SolvedObject(pos,axis,angles,cuts,rot);
70

  
71
    int[][] moveTable   = mObject.getMoveTable();
72

  
73
    int[][] whiteCross   = new int[][]{ {12,13,16,17} };
74
    int[][] whiteCorners = new int[][]{ {0},{1},{2},{3} };
75
    int[][] secondLayer  = new int[][]{ {8},{9},{10},{11} };
76

  
77
    String a1 = "(3){-1,0,1,2}(6,3,8,3,15,5,17)";
78
    String a2 = "(3){-1,0,1,2}(15,5,17,5,6,3,8)";
79
    String a3 = "(3){-1,0,1,2}(12,3,14,3,8,5,6)";
80
    String a4 = "(3){-1,0,1,2}(8,5,6,5,12,3,14)";
81
    String a5 = "(3){-1,0,1,2}(11,3,9,3,14,5,12)";
82
    String a6 = "(3){-1,0,1,2}(14,5,12,5,11,3,9)";
83
    String a7 = "(3){-1,0,1,2}(17,3,15,3,9,5,11)";
84
    String a8 = "(3){-1,0,1,2}(9,5,11,5,17,3,15)";
85

  
86
    MoveProviderAll all = new MoveProviderAll(moveTable);
87
    MoveProviderAlgs asl = new MoveProviderAlgs(mObject, "["+a1+";"+a2+";"+a3+";"+a4+";"+a5+";"+a6+";"+a7+";"+a8+"]");
88
    MoveProviderAlgs aeO = new MoveProviderAlgs(mObject, "(3){-1,0,1,2}(11,17,5,15,3,9)");
89
    MoveProviderAlgs aeP = new MoveProviderAlgs(mObject, "(3){-1,0,1,2}(6,5,8,5,6,4,8){0,1}");
90
    MoveProviderAlgs acP = new MoveProviderAlgs(mObject, "(3){-1,0,1,2}(5,6,3,9,5,8,3,11){0,1}");
91
    MoveProviderAlgs acO = new MoveProviderAlgs(mObject, "(3){-1,0,1,2}(15,2,17,0){-2,0,2}");
92

  
93
    TargetProvider wcr = new TargetProviderAll(whiteCross);
94
    TargetProvider wco = new TargetProviderAll(whiteCorners);
95
    TargetProvider sla = new TargetProviderAll(secondLayer);
96
    TargetProvider oll = new TargetProviderOrie(mObject,14,1);
97
    TargetProvider pll = new TargetProviderPerm(mObject,14,1);
98
    TargetProvider pcl = new TargetProviderPerm(mObject, 4,1);
99
    TargetProvider ocl = new TargetProviderOrie(mObject, 4,1);
100

  
101
    Phase[] phases =
102
      {
103
      new PhaseMitm( mObject, all, wcr),
104
      new PhaseMitm( mObject, all, wco),
105
      new PhaseMitm( mObject, asl, sla),
106
      new PhaseMitm( mObject, aeO, oll),
107
      new PhaseMitm( mObject, aeP, pll),
108
      new PhaseMitm( mObject, acP, pcl),
109
      new PhaseMitm( mObject, acO, ocl),
110
      };
111

  
112
    mSolver = new SolverPhased(mObject,phases);
113
    }
114

  
115
///////////////////////////////////////////////////////////////////////////////////////////////////
116
    
117
  public SolvedObject getObject()
118
    {
119
    return mObject;      
120
    }
121

  
122
///////////////////////////////////////////////////////////////////////////////////////////////////
123

  
124
  public int[][] solution(int[] quats)
125
    {
126
    return mSolver.solution(quats);  
127
    }
128
}

Also available in: Unified diff