def solve(cubestring): """Solves a 2x2x2 cube defined by its cube definition string. :param cubestring: The format of the string is given in the Facelet class defined in the file enums.py :return A list of all optimal solving maneuvers """ global solutions fc = face.FaceCube() s = fc.from_string( cubestring ) ##################################################################################### if s is not True: return s # Error in facelet cube cc = fc.to_cubie_cube() s = cc.verify() if s != cubie.CUBE_OK: return s # Error in cubie cube solutions = [] co_cube = coord.CoordCube(cc) togo = pr.corner_depth[N_TWIST * co_cube.cornperm + co_cube.corntwist] search(co_cube.cornperm, co_cube.corntwist, [], togo) s = '' for i in range( len(solutions) ): # use range(min(len(solutions), 1)) if you want to return only a single solution ps = '' for m in solutions[i]: ps += m.name + ' ' ps += '(' + str(len(ps) // 3) + 'f)\r\n' s += ps return s
def run(self): cb = None if self.rot == 0: # no rotation cb = cubie.CubieCube(self.cb_cube.cp, self.cb_cube.co, self.cb_cube.ep, self.cb_cube.eo) elif self.rot == 1: # conjugation by 120° rotation cb = cubie.CubieCube(sy.symCube[32].cp, sy.symCube[32].co, sy.symCube[32].ep, sy.symCube[32].eo) cb.multiply(self.cb_cube) cb.multiply(sy.symCube[16]) elif self.rot == 2: # conjugation by 240° rotation cb = cubie.CubieCube(sy.symCube[16].cp, sy.symCube[16].co, sy.symCube[16].ep, sy.symCube[16].eo) cb.multiply(self.cb_cube) cb.multiply(sy.symCube[32]) if self.inv == 1: # invert cube tmp = cubie.CubieCube() cb.inv_cubie_cube(tmp) cb = tmp self.co_cube = coord.CoordCube( cb) # the rotated/inverted cube in coordinate representation dist = self.co_cube.get_depth_phase1() for togo1 in range( dist, 20): # iterative deepening, solution has at least dist moves self.sofar_phase1 = [] self.search(self.co_cube.flip, self.co_cube.twist, self.co_cube.slice_sorted, dist, togo1)