Project

General

Profile

« Previous | Next » 

Revision 5b9f1cec

Added by Leszek Koltunski about 1 year ago

Dino6 solver: pruning version done.

View differences:

src/main/java/org/distorted/objectlib/tablebases/TBDino6.java
14 14
import android.content.res.Resources;
15 15

  
16 16
import org.distorted.library.type.Static3D;
17
import org.distorted.objectlib.R;
17 18

  
18 19
///////////////////////////////////////////////////////////////////////////////////////////////////
19 20

  
20
public class TBDino6 extends TablebasesAbstract
21
public class TBDino6 extends TablebasesPruning
21 22
{
23
  private static final int INDEX_INVERTED = 13379863; // quats (0,10,0,10, 11,11,11,11, 0,10,0,10)
24

  
22 25
  private static final int[][] QUATS =
23 26
      {
24 27
          {0,2,10,8, 1,4,6,7,   11,5,9,3},
......
35 38
          {4,11,7,9, 8,3,2,5,   6,10,1,0}
36 39
      };
37 40

  
41
  private int[][] mAngles;
42

  
38 43
///////////////////////////////////////////////////////////////////////////////////////////////////
39 44

  
40 45
  public TBDino6()
......
46 51

  
47 52
  public TBDino6(Resources res)
48 53
    {
49
    super(res,org.distorted.objectlib.R.raw.dino_3_tablebase);
54
    super(res,new int[] {R.raw.dino_3_pruning3,R.raw.dino_3_pruning4},new int[] {R.raw.dino_3_pruning10});
50 55
    }
51 56

  
52 57
///////////////////////////////////////////////////////////////////////////////////////////////////
53 58

  
54 59
  int[][] getBasicAngles()
55 60
    {
56
    int[] tmp = {3,3,3};
57
    return new int[][] { tmp,tmp,tmp,tmp };
61
    if( mAngles==null )
62
      {
63
      int[] tmp = {3,3,3};
64
      mAngles = new int[][] { tmp,tmp,tmp,tmp };
65
      }
66

  
67
    return mAngles;
58 68
    }
59 69

  
60 70
///////////////////////////////////////////////////////////////////////////////////////////////////
......
110 120

  
111 121
///////////////////////////////////////////////////////////////////////////////////////////////////
112 122
// specifically for the tablebase
123
///////////////////////////////////////////////////////////////////////////////////////////////////
124
// two solved positions: original and mirrored (left face swapped with right)
125

  
126
  @Override
127
  int[] getSolvedIndices()
128
    {
129
    return new int[] {0,INDEX_INVERTED};
130
    }
131

  
132
///////////////////////////////////////////////////////////////////////////////////////////////////
133
// ditto
134

  
135
  @Override
136
  boolean isSolved(int index)
137
    {
138
    return index==0 || index==INDEX_INVERTED;
139
    }
140

  
141
///////////////////////////////////////////////////////////////////////////////////////////////////
142
// we can never really move the top-front edge, because if we do so, we would also rotate the
143
// rotation axis themselves! (see getIndex() where the cubit quats are normalized so that quat[0]
144
// - i.e. the front-top edge - is always 0).
145
// That's why map the moves (0,2,X) to (0,0&1,-X) and (3,0,X) to (3,1&2,-X)
146

  
147
  @Override
148
  int[] newMove(int axis, int layer, int angle)
149
    {
150
    if( axis==0 && layer==2 ) return new int[] { axis, (1<<0)+(1<<1), angle==1 ? 1:-1};
151
    if( axis==3 && layer==0 ) return new int[] { axis, (1<<1)+(1<<2), angle==1 ? 1:-1};
152

  
153
    int maxAngle = mAngles[axis][layer];
154
    angle = maxAngle-angle;
155
    if( angle> 0.5f*maxAngle ) angle -= maxAngle;
156
    return new int[] { axis, (1<<layer), angle };
157
    }
158

  
113 159
///////////////////////////////////////////////////////////////////////////////////////////////////
114 160

  
115 161
  int getSize()
......
121 167

  
122 168
  int getMinScramble()
123 169
    {
124
    return 9;
170
    return 8;
171
    }
172

  
173
///////////////////////////////////////////////////////////////////////////////////////////////////
174

  
175
  int[] getMidPruningLevels()
176
    {
177
    return new int[] {3,4};
178
    }
179

  
180
///////////////////////////////////////////////////////////////////////////////////////////////////
181

  
182
  int[] getHighPruningLevels()
183
    {
184
    return new int[] {10};
185
    }
186

  
187
///////////////////////////////////////////////////////////////////////////////////////////////////
188

  
189
  int getGodsNumber()
190
    {
191
    return 10;
192
    }
193

  
194
///////////////////////////////////////////////////////////////////////////////////////////////////
195

  
196
  boolean moveCanProceed(int lastA, int lastR, int currA, int currR)
197
    {
198
    return (lastA!=currA) || (lastR!=currR);
125 199
    }
126 200

  
127 201
///////////////////////////////////////////////////////////////////////////////////////////////////
......
157 231
///////////////////////////////////////////////////////////////////////////////////////////////////
158 232
// in-place!
159 233

  
160
  private int[] getQuatsFromPerm(int[] perm)
234
  public static int[] getQuatsFromPerm(int[] perm)
161 235
    {
162 236
    for(int i=0; i<12; i++)
163 237
      {

Also available in: Unified diff