def find_unsolved(self, cube, print_debug=False): unsolved = [] for dest_edge, dest_edge2 in Cube.cw_corners_on_face('up'): #print dest_edge, dest_edge2 if cube.get_color('up', dest_edge, dest_edge2) != 'yellow': corner_neighbors = Cube.cw_neighbor_corners( ('up', dest_edge, dest_edge2)) #print corner_neighbors colors = [cube.get_color(face, edge, edge2) for face, edge, edge2 in corner_neighbors] #print colors yellow_index = colors.index('yellow') assert yellow_index == 1 or yellow_index == 2 yellow_corner = corner_neighbors[yellow_index] unsolved.append(Unsolved( yellow_corner[0], yellow_corner[1], yellow_corner[2], 'up', dest_edge, dest_edge2)) return unsolved
def solve_case(self, cube, unsolved, print_debug=False): case = unsolved[0] if print_debug: print "DEBUG: case = " + str(case) source_cubie = (case.source_face, case.source_edge, case.source_edge2) if cube.is_cubie_in_layer(source_cubie, 'up'): corner_neighbors = Cube.cw_neighbor_corners(source_cubie) upper_corners = [c for c in corner_neighbors if c[0] == 'up'] assert (len(upper_corners) == 1) upper_corner = upper_corners[0] setup_move = cube.get_simple_move_corners( 'up', (upper_corner[1], upper_corner[2]), \ (case.dest_edge, case.dest_edge2)) times = setup_move[1] if times != 0: if print_debug: print "DEBUG: returning setup_move " + str([setup_move]) return [setup_move] upper_corner_index = corner_neighbors.index(upper_corner) if upper_corner_index == 0: edge_below = tuple([f for f in source_cubie if f != 'up']) assert len(edge_below) == 2 setup_sequence = cube.get_move_cubie_into_layer(edge_below, 'up') if print_debug: print "DEBUG: edge_below = {0}, setup_sequence = {1}".format(edge_below, setup_sequence) steps = setup_sequence + [('up', 2)] + \ Solver.reverse_sequence(setup_sequence) elif upper_corner_index == 1: steps = [(case.source_face, 3), ('up', 3), (case.source_face, 1)] elif upper_corner_index == 2: steps = [(case.source_face, 1), ('up', 1), (case.source_face, 3)] else: raise Exception("upper_corner_index should be 0, 1, or 2") if print_debug: print "DEBUG: returning upper_corner_index " + str(upper_corner_index) + ", steps = " + str(steps) return steps else: setup_sequence = cube.get_move_cubie_into_layer(source_cubie, 'up') if print_debug: print "DEBUG: setup_sequence = " + str(setup_sequence) steps = setup_sequence + [('up', 1)] + \ Solver.reverse_sequence(setup_sequence) if print_debug: print "DEBUG: returning steps = " + str(steps) return steps
def solve_case(self, cube, unsolved, print_debug=False): if print_debug: print "DEBUG: unsolved = " + str([str(u) for u in unsolved]) case = unsolved[0] source_corner = (case.source_face, case.source_edge, case.source_edge2) dest_corner = (case.dest_face, case.dest_edge, case.dest_edge2) source_non_upper_edges = tuple([f for f in source_corner if f != 'up']) setup_sequence = [cube.get_simple_move_corners('up', source_non_upper_edges, ('right', 'back'))] dest_corner_neighbors = Cube.cw_neighbor_corners(dest_corner) corner_index = dest_corner_neighbors.index(source_corner) assert corner_index == 1 or corner_index == 2 if corner_index == 1: steps = [('down', 1), ('right', 1), ('down', 3), ('right', 3), ('down', 1), ('right', 1), ('down', 3), ('right', 3)] else: steps = [('right', 1), ('down', 1), ('right', 3), ('down', 3), ('right', 1), ('down', 1), ('right', 3), ('down', 3)] return setup_sequence + steps