14 |
14 |
|
15 |
15 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
16 |
16 |
|
17 |
|
public class Solver3x3Beginner
|
|
17 |
public class Solver3x3Beginner extends SolverAbstract
|
18 |
18 |
{
|
19 |
|
private final SolvedObject mObject;
|
20 |
|
private final SolverPhased mSolver;
|
21 |
|
|
22 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
23 |
|
|
24 |
|
public Solver3x3Beginner()
|
|
19 |
@Override
|
|
20 |
SolvedObject createObject()
|
25 |
21 |
{
|
26 |
22 |
float A = 1.0f;
|
27 |
23 |
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 |
24 |
|
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},
|
|
25 |
float[][] pos = new float[][]
|
|
26 |
{
|
|
27 |
{-A,-A,-A},
|
|
28 |
{-A,-A, A},
|
|
29 |
{-A, A,-A},
|
|
30 |
{-A, A, A},
|
|
31 |
{ A,-A,-A},
|
|
32 |
{ A,-A, A},
|
|
33 |
{ A, A,-A},
|
|
34 |
{ A, A, A},
|
|
35 |
|
|
36 |
{ B,-A,-A},
|
|
37 |
{ B,-A, A},
|
|
38 |
{ B, A,-A},
|
|
39 |
{ B, A, A},
|
|
40 |
{-A, B,-A},
|
|
41 |
{-A, B, A},
|
|
42 |
{ A, B,-A},
|
|
43 |
{ A, B, A},
|
|
44 |
{-A,-A, B},
|
|
45 |
{-A, A, B},
|
|
46 |
{ A,-A, B},
|
|
47 |
{ A, A, B},
|
|
48 |
|
|
49 |
{ A, B, B},
|
|
50 |
{-A, B, B},
|
|
51 |
{ B, A, B},
|
|
52 |
{ B,-A, B},
|
|
53 |
{ B, B, A},
|
|
54 |
{ B, B,-A}
|
|
55 |
};
|
52 |
56 |
|
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 |
57 |
Static3D[] axis = new Static3D[] { new Static3D(1,0,0), new Static3D(0,1,0), new Static3D(0,0,1) };
|
62 |
58 |
int[] a = new int[] {4,4,4};
|
63 |
59 |
int[][] angles = new int[][] { a,a,a };
|
... | ... | |
66 |
62 |
boolean[] r = {true,false,true};
|
67 |
63 |
boolean[][] rot = {r,r,r};
|
68 |
64 |
|
69 |
|
mObject = new SolvedObject(pos,axis,angles,cuts,rot);
|
|
65 |
return new SolvedObject(pos,axis,angles,cuts,rot);
|
|
66 |
}
|
70 |
67 |
|
71 |
|
int[][] moveTable = mObject.getMoveTable();
|
|
68 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
72 |
69 |
|
|
70 |
@Override
|
|
71 |
Phase[] createPhases(SolvedObject object)
|
|
72 |
{
|
|
73 |
int[][] moveTable = object.getMoveTable();
|
73 |
74 |
int[][] whiteCross = new int[][]{ {12,13,16,17} };
|
74 |
75 |
int[][] whiteCorners = new int[][]{ {0},{1},{2},{3} };
|
75 |
76 |
int[][] secondLayer = new int[][]{ {8},{9},{10},{11} };
|
... | ... | |
84 |
85 |
String a8 = "(3){-1,0,1,2}(9,5,11,5,17,3,15)";
|
85 |
86 |
|
86 |
87 |
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}");
|
|
88 |
MoveProviderAlgs asl = new MoveProviderAlgs(object, "["+a1+";"+a2+";"+a3+";"+a4+";"+a5+";"+a6+";"+a7+";"+a8+"]");
|
|
89 |
MoveProviderAlgs aeO = new MoveProviderAlgs(object, "(3){-1,0,1,2}(11,17,5,15,3,9)");
|
|
90 |
MoveProviderAlgs aeP = new MoveProviderAlgs(object, "(3){-1,0,1,2}(6,5,8,5,6,4,8){0,1}");
|
|
91 |
MoveProviderAlgs acP = new MoveProviderAlgs(object, "(3){-1,0,1,2}(5,6,3,9,5,8,3,11){0,1}");
|
|
92 |
MoveProviderAlgs acO = new MoveProviderAlgs(object, "(3){-1,0,1,2}(15,2,17,0){-2,0,2}");
|
92 |
93 |
|
93 |
94 |
TargetProvider wcr = new TargetProviderAll(whiteCross);
|
94 |
95 |
TargetProvider wco = new TargetProviderAll(whiteCorners);
|
95 |
96 |
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);
|
|
97 |
TargetProvider oll = new TargetProviderOrie(object,14,1);
|
|
98 |
TargetProvider pll = new TargetProviderPerm(object,14,1);
|
|
99 |
TargetProvider pcl = new TargetProviderPerm(object, 4,1);
|
|
100 |
TargetProvider ocl = new TargetProviderOrie(object, 4,1);
|
100 |
101 |
|
101 |
|
Phase[] phases =
|
|
102 |
return new Phase[]
|
102 |
103 |
{
|
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),
|
|
104 |
new PhaseMitm( object, all, wcr),
|
|
105 |
new PhaseMitm( object, all, wco),
|
|
106 |
new PhaseMitm( object, asl, sla),
|
|
107 |
new PhaseMitm( object, aeO, oll),
|
|
108 |
new PhaseMitm( object, aeP, pll),
|
|
109 |
new PhaseMitm( object, acP, pcl),
|
|
110 |
new PhaseMitm( object, acO, ocl),
|
110 |
111 |
};
|
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 |
112 |
}
|
128 |
113 |
}
|
Improve SOlver3x3Beginner