示例#1
0
 static int getSolvedSym(CenterCube cube) {
   Center1 c = new Center1(cube.ct);
   for (int j = 0; j < 48; j++) {
     boolean check = true;
     for (int i = 0; i < 24; i++) {
       if (c.ct[i] != i / 4) {
         check = false;
         break;
       }
     }
     if (check) {
       return 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);
   }
   return -1;
 }
示例#2
0
 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;
 }
示例#3
0
  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);
    }
  }