Revision 1002958d
Added by Leszek Koltunski about 1 year ago
src/main/java/org/distorted/objectlib/tablebases/TBDino6.java | ||
---|---|---|
147 | 147 |
@Override |
148 | 148 |
int[] newMove(int axis, int layer, int angle) |
149 | 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};
|
|
150 |
if( axis==0 && layer==2 ) return new int[] { axis, 3, angle==1 ? 1:-1};
|
|
151 |
if( axis==3 && layer==0 ) return new int[] { axis, 6, angle==1 ? 1:-1};
|
|
152 | 152 |
|
153 | 153 |
int maxAngle = mAngles[axis][layer]; |
154 | 154 |
angle = maxAngle-angle; |
... | ... | |
176 | 176 |
for(int i=0; i<len; i++) |
177 | 177 |
{ |
178 | 178 |
int[] move = moves[i]; |
179 |
if( move[1]==((1<<0)+(1<<1)) || move[1]==((1<<1)+(1<<2)) ) unrollMoves(moves,i);
|
|
179 |
if( move[1]==3 || move[1]==6 ) unrollMoves(moves,i);
|
|
180 | 180 |
} |
181 |
|
|
182 | 181 |
*/ |
183 | 182 |
} |
184 | 183 |
|
... | ... | |
186 | 185 |
|
187 | 186 |
private void unrollMoves(int[][] moves, int index) |
188 | 187 |
{ |
189 |
int caseUnroll=0; |
|
190 | 188 |
int[] move = moves[index]; |
189 |
int len = moves.length; |
|
191 | 190 |
|
192 |
if( move[1]==((1<<0)+(1<<1)) )
|
|
191 |
if( move[0]==0 && move[1]==3 )
|
|
193 | 192 |
{ |
194 |
move[1] = (1<<2);
|
|
193 |
move[1] = 4;
|
|
195 | 194 |
move[2] = -move[2]; |
196 |
caseUnroll = move[2]>0 ? 0:1;
|
|
195 |
for(int i=index+1; i<len; i++) unrollMove(moves[i],move[2]>0 ? 0:1);
|
|
197 | 196 |
} |
198 |
else if( move[1]==((1<<1)+(1<<2)) )
|
|
197 |
else if( move[0]==3 && move[1]==6 )
|
|
199 | 198 |
{ |
200 |
move[1] = (1<<0);
|
|
199 |
move[1] = 1;
|
|
201 | 200 |
move[2] = -move[2]; |
202 |
caseUnroll = move[2]>0 ? 2:3;
|
|
201 |
for(int i=index+1; i<len; i++) unrollMove(moves[i],move[2]>0 ? 0:1);
|
|
203 | 202 |
} |
203 |
} |
|
204 | 204 |
|
205 |
int len = moves.length; |
|
206 |
for(int i=index+1; i<len; i++) unrollMove(moves[i],caseUnroll); |
|
205 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
206 |
|
|
207 |
private void printMoves(String s, int[][] moves) |
|
208 |
{ |
|
209 |
StringBuilder sb = new StringBuilder(); |
|
210 |
|
|
211 |
for(int[] move: moves) |
|
212 |
{ |
|
213 |
sb.append('('); |
|
214 |
sb.append(move[0]); |
|
215 |
sb.append(' '); |
|
216 |
sb.append(move[1]); |
|
217 |
sb.append(' '); |
|
218 |
sb.append(move[2]); |
|
219 |
sb.append(')'); |
|
220 |
} |
|
221 |
|
|
222 |
android.util.Log.e("D", s+" : "+sb); |
|
207 | 223 |
} |
208 | 224 |
|
209 | 225 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
219 | 235 |
switch(ax) |
220 | 236 |
{ |
221 | 237 |
case 0: break; |
222 |
case 1: move[0]=3; move[1]=negate(la); break; |
|
238 |
case 1: move[0]=3; move[1]=negate(la); move[2] = -move[2]; break;
|
|
223 | 239 |
case 2: move[0]=1; break; |
224 |
case 3: move[0]=2; move[1]=negate(la); break; |
|
240 |
case 3: move[0]=2; move[1]=negate(la); move[2] = -move[2]; break;
|
|
225 | 241 |
} |
226 | 242 |
break; |
227 | 243 |
case 1: android.util.Log.e("D", "case 1 ax "+ax); |
... | ... | |
229 | 245 |
{ |
230 | 246 |
case 0: break; |
231 | 247 |
case 1: move[0]=2; break; |
232 |
case 2: move[0]=3; move[1]=negate(la); break; |
|
233 |
case 3: move[0]=1; move[1]=negate(la); break; |
|
248 |
case 2: move[0]=3; move[1]=negate(la); move[2] = -move[2]; break;
|
|
249 |
case 3: move[0]=1; move[1]=negate(la); move[2] = -move[2]; break;
|
|
234 | 250 |
} |
235 | 251 |
break; |
236 | 252 |
case 2: android.util.Log.e("D", "case 2 ax "+ax); |
237 | 253 |
switch(ax) |
238 | 254 |
{ |
239 |
case 0: move[0]=1; move[1]=negate(la); break; |
|
255 |
case 0: move[0]=1; move[1]=negate(la); move[2] = -move[2]; break;
|
|
240 | 256 |
case 1: move[0]=2; break; |
241 |
case 2: move[0]=0; move[1]=negate(la); break; |
|
257 |
case 2: move[0]=0; move[1]=negate(la); move[2] = -move[2]; break;
|
|
242 | 258 |
case 3: break; |
243 | 259 |
} |
244 | 260 |
break; |
245 | 261 |
case 3: android.util.Log.e("D", "case 3 ax "+ax); |
246 | 262 |
switch(ax) |
247 | 263 |
{ |
248 |
case 0: move[0]=2; move[1]=negate(la); break; |
|
249 |
case 1: move[0]=0; move[1]=negate(la); break; |
|
264 |
case 0: move[0]=2; move[1]=negate(la); move[2] = -move[2]; break;
|
|
265 |
case 1: move[0]=0; move[1]=negate(la); move[2] = -move[2]; break;
|
|
250 | 266 |
case 2: move[0]=1; break; |
251 | 267 |
case 3: break; |
252 | 268 |
} |
... | ... | |
258 | 274 |
|
259 | 275 |
private int negate(int layer) |
260 | 276 |
{ |
261 |
return 7-layer; |
|
277 |
switch(layer) |
|
278 |
{ |
|
279 |
case 1: return 4; |
|
280 |
case 3: return 6; |
|
281 |
case 4: return 1; |
|
282 |
case 6: return 3; |
|
283 |
} |
|
284 |
return layer; |
|
262 | 285 |
} |
263 | 286 |
|
264 | 287 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Dino6 solver: corrections to the pruning engine.