Project

General

Profile

« Previous | Next » 

Revision f083b7de

Added by Leszek Koltunski 11 months ago

Improve SOlver3x3Beginner

View differences:

src/main/java/org/distorted/objectlib/algsolvers/implemented/Solver3x3Beginner.java
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
}
src/main/java/org/distorted/objectlib/algsolvers/implemented/SolverAbstract.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.objectlib.algsolvers.Phase;
13
import org.distorted.objectlib.algsolvers.SolvedObject;
14
import org.distorted.objectlib.algsolvers.SolverPhased;
15

  
16
///////////////////////////////////////////////////////////////////////////////////////////////////
17

  
18
abstract class SolverAbstract
19
{
20
    private final SolvedObject mObject;
21
    private final SolverPhased mSolver;
22

  
23
///////////////////////////////////////////////////////////////////////////////////////////////////
24

  
25
    SolverAbstract()
26
      {
27
      mObject = createObject();
28
      Phase[] phases = createPhases(mObject);
29
      mSolver = new SolverPhased(mObject,phases);
30
      }
31

  
32
///////////////////////////////////////////////////////////////////////////////////////////////////
33

  
34
    abstract SolvedObject createObject();
35
    abstract Phase[] createPhases(SolvedObject object);
36

  
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38

  
39
    public SolvedObject getObject()
40
      {
41
      return mObject;
42
      }
43

  
44
///////////////////////////////////////////////////////////////////////////////////////////////////
45

  
46
    public int[][] solution(int[] quats)
47
      {
48
      return mSolver.solution(quats);
49
      }
50
}

Also available in: Unified diff