def solve(cube_c54): """ solve La fonction principale du projet qui résoud un Rubik's Cube. :Args: cube_c54 {String} Le cube passé sous sa forme '54 facettes colorées' O G R B W Y B G B G Y Y O Y O W O W G R Y O O O B G B R R Y R B W W W R B W Y G R O W G R Y B R G Y W B O G :Returns: {String} une chaîne de caractères qui encode la manoeuvre qui mène du cube de départ à la permutation monochrome. :Example: solve('OGRBWYBGBGYYOYOWOWGRYOOOBGBRRYRBWWWRBWYGROWGRYBRGYWBOG') """ err, mvts, _ = solve_full(cube_c54) print(err) if err: return err else: mvts = [translate_mvt(m) for m in mvts] #on remplace les i en ' return ''.join(mvts)
return (err, None, None) if err \ else (None, mouvements, cube_lu) if __name__=="__main__": """ :Example: python poqb.py python poqb.py -cYYYYYYYYYOOOBBBRRRGGGOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW python poqb.py --cube=YYYYYYYYYOOOBBBRRRGGGOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW """ #On récupère le cube en paramètre ou on utilise celui par défaut params = readArgs() cube = str(params['cube']) if 'cube' in params else DEFAULT_CUBE err, resolution, cube_lu = solve_full(cube) if err: print("Erreur dans la lecture du cube : " + err) else: #L'utilisateur a demandé la résolution pas à pas if 'tuto' in params: print('Résolution de :', "".join([colorize(x) for x in cube])) tuto(cube_lu, resolution) print('Résolution de :', "".join([colorize(x) for x in cube]) +'\n') resolution = " ".join([translate_mvt(x) for x in resolution]) print('Positionnez la face bleue face à vous et la face blanche face au sol\n') print("Puis exécutez la manoeuvre : {}".format(resolution) +'\n')
def tuto(cube, mouvements): """ tuto :Args: cube {Cube} Un cube à la sortie de lecture_cube mouvements {List} Suite de mouvements à appliquer sur le cube pour le résoudre, calculée par algo_cfop() """ #lecture des paramètres params = readArgs() speed = float(params['speed']) if 'speed' in params else SPEED resolution = " ".join([translate_mvt(x) for x in mouvements]) mouvementsDone = [] mouvementsRestants = list(mouvements) clear() if 'auto' in params: print('Positionnez la face bleue face à vous et la face blanche face au sol\n') print('Le tuto en mode auto va bientôt commencer, tenez vous prêt !') sleep(3) clear() sleep(1) print("Exécution de la manoeuvre : {}".format(resolution) ) print(cube) for m in mouvements: clear() mouvementsRestants.remove(m) method = getattr(cube, 'rot_' + m) method() print( "Exécution de la manoeuvre : " #les mouvements effectués + TermColors.green + \ "{}".format(" ".join([translate_mvt(x) for x in mouvementsDone]))+ \ TermColors.end + ' ' + #le mouvement actuel TermColors.bgGreen + translate_mvt(m) + TermColors.end + \ #les mouvements restant " {}".format(" ".join([translate_mvt(x) \ for x in mouvementsRestants]) ) + '\n' ) if 'moves' not in params: print(cube) else: #L'utilisateur a demandé de voir l'aide des mouvements print(aideMouvements(cube, m)) print("Rotation : ", translate_mvt(m) +'\n\n') mouvementsDone.append(m) if 'auto' not in params: print('Press any key to continue . . .\n') newGetch() else: sleep(1 / speed)