static void createMoveTable() { System.out.println("Create Phase1 Center Move Table..."); Center1 c = new Center1(); Center1 d = new Center1(); for (int i = 0; i < 15582; i++) { d.set(sym2raw[i]); for (int m = 0; m < 36; m++) { c.set(d); c.move(m); ctsmv[i][m] = c.getsym(); } } }
static void initSym2Raw() { Center1 c = new Center1(); int[] occ = new int[735471 / 32 + 1]; int count = 0; for (int i = 0; i < 735471; i++) { if ((occ[i >>> 5] & (1 << (i & 0x1f))) == 0) { c.set(i); for (int j = 0; j < 48; j++) { int idx = c.get(); occ[idx >>> 5] |= (1 << (idx & 0x1f)); if (raw2sym != null) { raw2sym[idx] = count << 6 | syminv[j]; } c.rot(0); if (j % 2 == 1) c.rot(1); if (j % 8 == 7) c.rot(2); if (j % 16 == 15) c.rot(3); } sym2raw[count++] = i; } } assert count == 15582; }
static void initSym() { Center1 c = new Center1(); for (byte i = 0; i < 24; i++) { c.ct[i] = i; } Center1 d = new Center1(c.ct); Center1 e = new Center1(c.ct); Center1 f = new Center1(c.ct); for (int i = 0; i < 48; i++) { for (int j = 0; j < 48; j++) { for (int k = 0; k < 48; k++) { if (c.equals(d)) { symmult[i][j] = k; if (k == 0) { syminv[i] = j; } } d.rot(0); if (k % 2 == 1) d.rot(1); if (k % 8 == 7) d.rot(2); if (k % 16 == 15) d.rot(3); } c.rot(0); if (j % 2 == 1) c.rot(1); if (j % 8 == 7) c.rot(2); if (j % 16 == 15) c.rot(3); } c.rot(0); if (i % 2 == 1) c.rot(1); if (i % 8 == 7) c.rot(2); if (i % 16 == 15) c.rot(3); } for (int i = 0; i < 48; i++) { c.set(e); c.rotate(syminv[i]); for (int j = 0; j < 36; j++) { d.set(c); d.move(j); d.rotate(i); for (int k = 0; k < 36; k++) { f.set(e); f.move(k); if (f.equals(d)) { symmove[i][j] = k; break; } } } } c.set(0); for (int i = 0; i < 48; i++) { finish[syminv[i]] = c.get(); c.rot(0); if (i % 2 == 1) c.rot(1); if (i % 8 == 7) c.rot(2); if (i % 16 == 15) c.rot(3); } }