dreo.h (2285B)
1 #define DRESEP_CLASSES 81 2 3 STATIC uint64_t coord_dresep_nosym(cube_t); 4 STATIC cube_t invcoord_dresep_nosym(uint64_t); 5 6 STATIC uint64_t coordinate_dreo_coord(cube_t, const unsigned char *); 7 STATIC cube_t coordinate_dreo_cube(uint64_t, const unsigned char *); 8 STATIC bool coordinate_dreo_isnasty(uint64_t, const unsigned char *); 9 STATIC size_t coordinate_dreo_gendata(unsigned char *); 10 11 STATIC bool is_dreo_solvable(cube_t); 12 13 STATIC coord_t coordinate_dreo = { 14 .name = "DREO", 15 .coord = &coordinate_dreo_coord, 16 .cube = &coordinate_dreo_cube, 17 .isnasty = &coordinate_dreo_isnasty, 18 .gendata = coordinate_dreo_gendata, 19 .max = DRESEP_CLASSES * POW_3_7, 20 .trans_mask = TM_UDRLFIX, 21 .moves_mask_gendata = MM18_EO, 22 .moves_mask_solve = MM18_EO, 23 .is_admissible = &solution_lastqt_cw, 24 .solution_prune = NULL, 25 .is_solvable = &is_dreo_solvable, 26 .is_solved = NULL, 27 .allow_niss = true, 28 .pruning_distribution = { 29 [0] = 1, 30 [1] = 1, 31 [2] = 4, 32 [3] = 22, 33 [4] = 160, 34 [5] = 1286, 35 [6] = 8550, 36 [7] = 42152, 37 [8] = 90748, 38 [9] = 33466, 39 [10] = 757, 40 }, 41 .pruning_max = 10, 42 .sym = { 43 .classes = DRESEP_CLASSES, 44 .max = COMB_12_4, 45 .coord = &coord_dresep_nosym, 46 .cube = &invcoord_dresep_nosym, 47 .max2 = POW_3_7, 48 .coord2 = &coord_co, 49 .cube2 = &invcoord_co, 50 .merge = &coordinate_merge_ec, 51 }, 52 }; 53 54 STATIC uint64_t 55 coord_dresep_nosym(cube_t cube) 56 { 57 return coord_esep(cube) / COMB_8_4; 58 } 59 60 STATIC cube_t 61 invcoord_dresep_nosym(uint64_t coord) 62 { 63 return invcoord_esep(coord * COMB_8_4); 64 } 65 66 STATIC uint64_t 67 coordinate_dreo_coord(cube_t cube, const unsigned char *data) 68 { 69 return coord_coord_generic(&coordinate_dreo, cube, data); 70 } 71 72 STATIC cube_t 73 coordinate_dreo_cube(uint64_t i, const unsigned char *data) 74 { 75 return coord_cube_generic(&coordinate_dreo, i, data); 76 } 77 78 STATIC bool 79 coordinate_dreo_isnasty(uint64_t i, const unsigned char *data) 80 { 81 return coord_isnasty_generic(&coordinate_dreo, i, data); 82 } 83 84 STATIC size_t 85 coordinate_dreo_gendata(unsigned char *data) 86 { 87 return coord_gendata_generic(&coordinate_dreo, data); 88 } 89 90 STATIC bool 91 is_dreo_solvable(cube_t cube) { 92 uint8_t c[8], e[12], i, cocount; 93 94 if (coord_eo(cube) != 0) 95 return false; 96 97 pieces(&cube, c, e); 98 99 for (i = 0, cocount = 0; i < 8; i++) 100 cocount += (c[i] & COBITS_2) >> COSHIFT; 101 102 return cocount % 3 == 0; 103 }