Пример #1
0
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)
Пример #2
0
        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')


Пример #3
0
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)