Revision 5b9f1cec
Added by Leszek Koltunski about 1 year ago
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
Dino6 solver: pruning version done.