Exemple #1
0
def check_corner(cube, corner, i):
    relations = cube.relation_representation["D"]
    if corner == find_cubie(cube, relations[0][i], True):
        return True
    elif corner == find_cubie(cube, relations[1][i], True):
        return True
    elif corner == find_cubie(cube, relations[2][i], True):
        return True
    return False
Exemple #2
0
def H_method(cube, lst, result_steps):
    pos1 = find_cubie(cube, lst[0])
    pos2 = find_cubie(cube, lst[1])
    maxel = max(cube.ideal_cube[pos1[0]].face[pos1[1]][pos1[2]], cube.ideal_cube[pos2[0]].face[pos2[1]][pos2[2]])
    fish_method_steps = {45 : ["r", "d", "U", "f", "f", "d", "U", "d", "U", "b", "d", "d", "B", "D", "u", "D", "u", "f", "f", "D", "u", "R", "d", "d"], # 44+45
                         47 : ["f", "d", "U", "l", "l", "d", "U", "d", "U", "r", "d", "d", "R", "D", "u", "D", "u", "l", "l", "D", "u", "F", "d", "d"]} # 42+47

    steps = fish_method_steps[maxel]
    for move in steps:
        cube.rotate(move)
        result_steps.append(move)
Exemple #3
0
def fish_method(cube, lst, result_steps):
    pos1 = find_cubie(cube, lst[0])
    pos2 = find_cubie(cube, lst[1])
    sum_el = cube.ideal_cube[pos1[0]].face[pos1[1]][pos1[2]] + cube.ideal_cube[pos2[0]].face[pos2[1]][pos2[2]]
    fish_method_steps = {92 : ["b", "l", "r", "d", "U", "f", "f", "d", "U", "d", "U", "b", "d", "d", "B", "D", "u", "D", "u", "f", "f", "D", "u", "R", "d", "d", "L", "B"], # 47+45
                        87: ["r", "b", "f", "d", "U", "l", "l", "d", "U", "d", "U", "r", "d", "d", "R", "D", "u", "D", "u", "l", "l", "D", "u", "F", "d", "d", "B", "R"], # 42+45
                        86: ["f", "r", "l", "d", "U", "b", "b", "d", "U", "d", "U", "f", "d", "d", "F", "D", "u", "D", "u", "b", "b", "D", "u", "L", "d", "d", "R", "F"], # 42+44
                        91: ["l", "f", "b", "d", "U", "r", "r", "d", "U", "d", "U", "l", "d", "d", "L", "D", "u", "D", "u", "r", "r", "D", "u", "B", "d", "d", "F", "L"]} # 44+47
    steps = fish_method_steps[sum_el]
    for move in steps:
        cube.rotate(move)
        result_steps.append(move)
Exemple #4
0
def check_fourth_step(cube):
    relations = cube.relation_representation["D"]
    for i in range(4):
        c = find_cubie(cube, relations[0][i])
        if not check_corner(cube, c, i):
            return False
    return True
Exemple #5
0
def one_round(cube, result_steps):
    methods = [[1, 2, 3, 4], [3, 1, 4, 2], [2, 4, 1, 3], [4, 3, 2, 1]]
    relations = cube.relation_representation["D"]
    for corner in range(len(relations[0])):
        c = find_cubie(cube, relations[0][corner])
        done = False
        i = corner - 1
        while not done:
            i = (i + 1) % 4
            if check_corner(cube, c, i):
                done = True
        method = methods[corner][i]
        if method == 1:
            continue
        elif method == 2:
            method_1_to_2(cube, corner, result_steps)
        elif method == 3:
            method_1_to_3(cube, corner, result_steps)
        elif method == 4:
            method_1_to_2(cube, corner, result_steps)
            cube.rotate("d")
            result_steps.append("d")
            method_1_to_2(cube, corner, result_steps)
            cube.rotate("D")
            result_steps.append("D")
            method_1_to_2(cube, corner, result_steps)
def corner_method(cube, pos_tup, i, prime_side, turn_u):
    places_4_5 = [35, 9, 27, 33, 11, 17, 19, 25, 1, 3, 6, 8]
    if turn_u > 0:
        for place in places_4_5:
            possible_pos = find_cubie(cube, place, True)
            el_in_possible_pos = cube.cube[possible_pos[0]].face[
                possible_pos[1]][possible_pos[2]]
            if el_in_possible_pos == cube.ideal_cube[pos_tup[0]].face[
                    pos_tup[1]][pos_tup[2]]:
                return place * 10, turn_u
    j = 1
    while True:
        if j > 5:
            # print("Error!!!")
            return None, None
            break
        possible_pos = find_cubie(
            cube, cube.relation_representation[prime_side][j][i], True)
        el_in_possible_pos = cube.cube[possible_pos[0]].face[possible_pos[1]][
            possible_pos[2]]
        if el_in_possible_pos == cube.ideal_cube[pos_tup[0]].face[pos_tup[1]][
                pos_tup[2]]:
            return j, turn_u
        j += 1
def edge_method(cube, pos_tup, i, middle_edge, prime_side):
    possible_places = [34, 26, 18, 10, 2, 5, 7, 4]
    j = 7
    i = (i + middle_edge) % 4
    while True:
        if middle_edge > 0 and not (j == 9 or j == 10):
            j += 1
            if j > 11:
                # print("Error!!!")
                return None, None
            continue
        if j > 11:
            for place in possible_places:
                possible_pos = find_cubie(cube, place, True)
                el_in_possible_pos = cube.cube[possible_pos[0]].face[possible_pos[1]][possible_pos[2]]
                if el_in_possible_pos == cube.ideal_cube[pos_tup[0]].face[pos_tup[1]][pos_tup[2]]:
                    return place * 10, middle_edge

            return None, None
        possible_pos = find_cubie(cube, cube.relation_representation[prime_side][j][i], True)
        el_in_possible_pos = cube.cube[possible_pos[0]].face[possible_pos[1]][possible_pos[2]]
        if el_in_possible_pos == cube.ideal_cube[pos_tup[0]].face[pos_tup[1]][pos_tup[2]]:
            return (j - 6), middle_edge
        j += 1
def solve_corners(cube, prime_side):
    res_steps = []
    relations = cube.relation_representation[prime_side][0]
    for i in range(len(relations)):
        turn_u = 0
        j = 8
        while j > 0:
            pos_tup = find_cubie(cube, relations[i], True)
            corner = cube.cube[pos_tup[0]].face[pos_tup[1]][pos_tup[2]]
            if corner == cube.ideal_cube[pos_tup[0]].face[pos_tup[1]][
                    pos_tup[2]]:
                j -= 1
                continue
            else:
                method = corner_method(cube, pos_tup, i, prime_side, turn_u)
            if method[0] == 1:
                corner_method1(cube, i, res_steps)
                break
            elif method[0] == 2:
                corner_method2(cube, i, res_steps)
                break
            elif method[0] == 3:
                corner_method3(cube, i, res_steps)
                break
            elif method[0] == 4:
                corner_method4(cube, i, res_steps)
                break
            elif method[0] == 5:
                corner_method5(cube, i, res_steps)
                break
            elif isinstance(method[0], int):
                corner_method6(cube, i, method[0], res_steps)
                break
            else:
                if j < 5:
                    turn_u += 1
                cube.rotate("D")
                res_steps.append("D")
                j -= 1

    return res_steps
def solve_edges(cube, prime_side, result_steps):
    relations = cube.relation_representation[prime_side][6]
    for i in range(len(relations)):
        j = 8
        middle_edge = 0
        while j > 0:
            pos_tup = find_cubie(cube, relations[i], True)
            edge = cube.cube[pos_tup[0]].face[pos_tup[1]][pos_tup[2]]
            if edge == cube.ideal_cube[pos_tup[0]].face[pos_tup[1]][pos_tup[2]]:
                j -= 1
                continue
            else:
                method = edge_method(cube, pos_tup, i, middle_edge, prime_side)
            if method[0] == 1:
                edge_method1(cube, i, result_steps)
                break
            elif method[0] == 2:
                edge_method2(cube, i, result_steps)
                break
            elif method[0] == 3:
                edge_method3(cube, i, method[1], result_steps)
                break
            elif method[0] == 4:
                edge_method4(cube, i, method[1], result_steps)
                break
            elif method[0] == 5:
                edge_method5(cube, i, result_steps)
                break
            elif isinstance(method[0], int):
                edge_method6(cube, i, method[0], result_steps)
            else:
                if j < 5:
                    middle_edge += 1
                cube.rotate("d")
                result_steps.append("d")
                j -= 1
Exemple #10
0
def check_bottom_corners(cube):
    return (find_cubie(cube, 46, True) == find_cubie(cube, 46)) and \
           (find_cubie(cube, 41, True) == find_cubie(cube, 41)) and \
           (find_cubie(cube, 43, True) == find_cubie(cube, 43)) and \
           (find_cubie(cube, 48, True) == find_cubie(cube, 48))
Exemple #11
0
def check_config_3(cube, rotated):
    situations = [[46, 41], [43, 41], [48, 43], [46, 48]]
    situation = situations[rotated]
    return (find_cubie(cube, 14, True) == find_cubie(cube, situation[0])) and \
           (find_cubie(cube, 41, True) == find_cubie(cube, situation[1]))