MCPcopy Create free account
hub / github.com/MeigenChou/DCTimer-Android / phase2

Method phase2

app/src/main/java/cs/sq12phase/Search.java:350–423  ·  view source on GitHub ↗
(int edge, int corner, boolean topEdgeFirst, boolean botEdgeFirst, int ml, int maxl, int depth, int lm)

Source from the content-addressed store, hash-verified

348 }
349
350 private boolean phase2(int edge, int corner, boolean topEdgeFirst, boolean botEdgeFirst, int ml, int maxl, int depth, int lm) {
351 if (maxl == 0 && !topEdgeFirst && botEdgeFirst/*edge==0 && corner==0 && !topEdgeFirst && botEdgeFirst && ml==0*/) {
352 return true;
353 }
354
355 //try each possible move. First twist;
356 if (lm != 0 && topEdgeFirst == botEdgeFirst) {
357 int edgex = Square.sqTwistMove[edge];
358 int cornerx = Square.sqTwistMove[corner];
359
360 if (Square.SquarePrun[edgex << 1 | (1 - ml)] < maxl && Square.SquarePrun[cornerx << 1 | (1 - ml)] < maxl) {
361 move[depth] = 0;
362 if (phase2(edgex, cornerx, topEdgeFirst, botEdgeFirst, 1 - ml, maxl - 1, depth + 1, 0)) {
363 return true;
364 }
365 }
366 }
367
368 //Try top layer
369 if (lm <= 0) {
370 boolean topEdgeFirstx = !topEdgeFirst;
371 int edgex = topEdgeFirstx ? Square.sqTopMove[edge] : edge;
372 int cornerx = topEdgeFirstx ? corner : Square.sqTopMove[corner];
373 int m = topEdgeFirstx ? 1 : 2;
374 int prun1 = Square.SquarePrun[edgex << 1 | ml];
375 int prun2 = Square.SquarePrun[cornerx << 1 | ml];
376 while (m < 12 && prun1 <= maxl && prun1 <= maxl) {
377 if (prun1 < maxl && prun2 < maxl) {
378 move[depth] = m;
379 if (phase2(edgex, cornerx, topEdgeFirstx, botEdgeFirst, ml, maxl - 1, depth + 1, 1)) {
380 return true;
381 }
382 }
383 topEdgeFirstx = !topEdgeFirstx;
384 if (topEdgeFirstx) {
385 edgex = Square.sqTopMove[edgex];
386 prun1 = Square.SquarePrun[edgex << 1 | ml];
387 m += 1;
388 } else {
389 cornerx = Square.sqTopMove[cornerx];
390 prun2 = Square.SquarePrun[cornerx << 1 | ml];
391 m += 2;
392 }
393 }
394 }
395
396 if (lm <= 1) {
397 boolean botEdgeFirstx = !botEdgeFirst;
398 int edgex = botEdgeFirstx ? Square.sqBottomMove[edge] : edge;
399 int cornerx = botEdgeFirstx ? corner : Square.sqBottomMove[corner];
400 int m = botEdgeFirstx ? 1 : 2;
401 int prun1 = Square.SquarePrun[edgex << 1 | ml];
402 int prun2 = Square.SquarePrun[cornerx << 1 | ml];
403 while (m < (maxl > 6 ? 6 : 12) && prun1 <= maxl && prun1 <= maxl) {
404 if (prun1 < maxl && prun2 < maxl) {
405 move[depth] = -m;
406 if (phase2(edgex, cornerx, topEdgeFirst, botEdgeFirstx, ml, maxl - 1, depth + 1, 2)) {
407 return true;

Callers 1

init2Method · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected