|
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 |
}
|
Abstract out Solver3x3Beginner - the first implemented Phased Solver.