def lecture_cube(str_cube): ''' lecture_cube Fonction qui permet de lire l'entrée de l'utilisateur. Prend une chaîne de 54 caractères et renvoie un objet cube initialisé, avec les nombres se rapportant aux couleurs. :Args: str {String} chaîne de 54 facettes :Returns: {Boolean|String}, {Cube} (error, cube) Un objet cube initialisé avec les numéros correspondant à la chaîne de caractères entrée en paramètre ''' #1. Découpage des faces de la chaîne en entrée c = Cube() try: faces = decomposition_faces(str_cube) #on découpe en faces except ValueError as e: return str(e), None #2. Vérification des faces error = check_faces(faces) #on check que les faces sont ok if error: return error, None #3. Remplir le rubik's cube #Chaque petit cube est codé dans l'objet cube #Ils correspondent à toutes les arêtes/coins en commun des différentes faces #Exemple : FU = Cube reliant les faces Front et Up #Comme nous avons les couleurs et la position de chaque face, #nous pouvons attribuer à tous ces cubes leurs couleurs respectives insertions = [ ('FU', [faces[2][1], faces[0][7]]), ('FRU', [faces[2][2], faces[3][0], faces[0][8]]), ('FR', [faces[2][5], faces[3][3]]), ('FRD', [faces[2][8], faces[3][6], faces[5][2]]), ('FD', [faces[2][7], faces[5][1]]), ('LFD', [faces[1][8], faces[2][6], faces[5][0]]), ('FL', [faces[2][3], faces[1][5]]), ('LFU', [faces[1][2], faces[2][0], faces[0][6]]), ('LU', [faces[1][1], faces[0][3]]), ('LD', [faces[1][7], faces[5][3]]), ('BU', [faces[4][1], faces[0][1]]), ('RBU', [faces[3][2], faces[4][0], faces[0][2]]), ('BR', [faces[4][3], faces[3][5]]), ('RBD', [faces[3][8], faces[4][6], faces[5][8]]), ('BD', [faces[4][7], faces[5][7]]), ('BLD', [faces[4][8], faces[1][6], faces[5][6]]), ('BL', [faces[4][5], faces[1][3]]), ('BLU', [faces[4][2], faces[1][0], faces[0][0]]), ('RD', [faces[3][7], faces[5][5]]), ('RU', [faces[3][1], faces[0][5]]), ] #on insert ces petits cubes tant qu'on ne détecte pas de petit #cube défaillant i = 0 l = len(insertions) while i < l: try: c.edit_cube(insertions[i][0], insertions[i][1]) except ValueError as e: return "Petits cubes invalides", None i += 1 #4. Mettre le cube dans la bonne position #(face blanche en bas, bleue en front) #les couleurs de chaque faces couleurs_faces = [face[4] for face in faces] v = (couleurs_faces.index(0), couleurs_faces.index(1)) if v[0] == 0: #si la face blanche est sur U # alors la face bleue est sur L, F, R ou B c.rot_UF() c.rot_UF() if not v[1] == 4: #on place la face bleue, sauf si elle est déjà sur F for _ in range(v[1]): c.rot_FR() elif v[0] == 5: #la face blanche est placée #on place la face bleue, sauf si elle est déjà sur F if v[1] == 1: c.rot_FR() #on tourne for j in [3, 4]: if v[1] == j or v[1] == j: for x in range(6 - j): c.rot_FR() #on tourne else: #la face blanche est sur L, F, R ou B #on place la face blanche sur F if v[0] == 1: c.rot_FR() #on tourne else: for j in [3, 4]: if v[0] == j or v[0] == j: for x in range(6 - j): c.rot_FR() #on tourne c.rot_UF() #on descend la face blanche sur D #on place la face bleue #si elle était sur U, elle est à la bonne place maintenant if v[1] == 5: #si elle était sur D, elle est sur B maintenant c.rot_FR() c.rot_FR() #on s'intéresse aux cas pù la face bleue est sur L ou R #cas où on est sur R maintenant elif v[1] == v[0] + 1 or (v[0], v[1]) == (4, 1): for x in range(3): c.rot_FR() #cas où on est sur L maintenant elif v[1] == v[0] - 1 or (v[0], v[1]) == (1, 4): c.rot_FR() return (False, c)