Table des matières
Solveur de Rubik Cube
Vous connaissez probablement le Rubik Cube et vous devez savoir qu'il existe des algorithmes – c'est à dire des méthodes – pour remettre un Rubik Cube dans l'ordre quelle que soit sa position de départ.
C'est ce que vous allez travailler.
Tout au long de cet exercice, quand je parle de Rubik Cube, il s'agit de l'ensemble. Quand je parle de cube, il s'agit d'un petit cube élémentaire.
Notations
Il est nécessaire de pouvoir noter de façon claire et univoque les positions et mouvements.
Les faces
Les faces visibles sont nommées
- U (up) pour la face du dessus,
- F (forward) pour la face de devant,
- R (right) pour la face de droite
et les face cachées sont nommées
- D (down) pour la face du dessous,
- B (back) pour la face de derrière,
- L (left) pour la face de gauche
- U2 pour la tranche entre U et D
- F2 pour la tranche entre F et D
- L2 ou R2 pour la tranche entre L et R
Les mouvements
Les mouvement sont toujours donnés en regardant la face la face en question. Par exemple, on dira U+ pour une rotation de U dans le sens direct – trigonométrique – quand on regarde U.
On aura donc les mouvements U+, D+, F+, B+, L+, R+ et même chose dans l'autre sens : U-, D-, F-, B-, L-, R-.
Au besoin on pourra aussi tourner les tranches centrales. U2, F2, L2, R2 de la même façon.
Enfin, on pourra tourner l'ensemble du cube.
La bonne position
Sur l'illustration, F est orange. Cela ne veut pas dire que F doit être orange. On pourrait décider de prendre la face bleue comme référence et la placer devant.
Ce sont les facettes au centre des faces qui servent de référence. Si la facette au centre de F est orange, alors la bonne position pour toutes les facette orange sera F. Mais si on tourne le cube et que la facette centrale de F devient bleue, alors c'est la nouvelle référence.
Pensez-y : si un cube est résolu et qu'on le tourne en entier, changeant la couleur sur le devant, le cube est toujours résolu !
Les coordonnées et les faces
Sur l'illustration, le cube de coin orange, rouge et bleu est à la fois sur les faces U, R et F. On pourra le nommer “FRU” ou indifféremment “RUF” ou la même chose dans n'importe quel ordre. Ce même cube est le plus loin sur les trois axes x, y et z. Ces coordonnées sont (1,1,1).
D'autres exemples sur l'illustration.
L'algorithme de résolution
Vous trouverez toutes les explications nécessaires sur ce site.
Le module fourni
Le module fourni est constitué des fichiers :
- tkrubik.py : définition du rubik cube et de l'interface graphique,
- cube.py : définition du fonctionnement d'un cube,
- facette.py : définition du fonctionnement d'une facette de cube
- coords.py : module mathématique de calcul sur des vecteurs 3D
Ce qui vous intéressera se trouve dans les deux premiers et encore pas besoin de les ouvrir.
Le fichier main
Votre travail est de télécharger les modules précédents, de les placer dans un dossier et d'ajouter le fichier main.py ci-dessous :
from tkrubik import TkRubik # mélange fixe MELANGE = "FUFFBRUFDFBRDBDUUFLUULBRBFRRDFUUFFFFURRDUDFFRFBLBRRFLUBLBDRFB" # création de l'objet graphique rubik_cube = TkRubik() rubik_cube.scramble(MELANGE) # zone que vous devez compléter # fin rubik_cube.end()
Vous devez compléter la zone centrale.
fonctions utiles dans tkrubik
Le fichier main crée un objet rubik_cube dont les caractéristiques sont définies dans le fichier rkrubik.py. Ce cube est mélangé tout de suite, toujours de la même façon pour simplifier votre travail.
Listons maintenant les fonctions disponibles.
les mouvements
rubik_cube.U('+')déclenchera une rotation de U dans le sens direct (trigo).rubik_cube.U('-')déclenchera une rotation de U dans le sens indirect (horaire).- et vous disposez encore de la même façon des mouvements D, F, B, L, R, L2, R2, F2, U2
rubik_cube.turn_left()fera tourner l'ensemble du cube vers la gaucherubik_cube.turn_right()fera tourner l'ensemble du cube vers la droiterubik_cube.turn_down()fera tourner l'ensemble du cube vers le bas (quand on regarde F)rubik_cube.turn_up()fera tourner l'ensemble du cube vers la haut (quand on regarde F)
sélectionner un cube
rubik_cube.get_cube_wich_faces_should_be('FRU')permet de sélectionner le cube qui, s'il était bien placé, selon les facettes au centre des faces, devrait aller à la position FRU. Bien sûr, FRU n'est qu'un exemple.rubik_cube.get_cube_wich_xyz_should_be(1,0,-1)permet de sélectionner le cube qui, s'il était bien placé, selon les facettes au centre des faces, devrait aller aux coordonnées (1,0,-1) – simple exemple là encore.rubik_cube.get_cube_with_faces('FRU')permet de sélectionner le cube qui se trouve actuellement à la position FRU – exemple toujours.rubik_cube.get_cube_by_coords(1,0,-1)permet de sélectionner le cube qui se trouve actuellement aux coordonnées (1,0,-1).
fonctions utiles dans cube
Une fois que vous avez sélectionner un certain cube, par exemple avec
cube = rubik_cube.get_cube_by_coords(1,0,-1)
cube est un objet défini dans cube.py et vous avez accès à différents attributs et méthodes.
attributs
cube.x,cube.yetcube.zpermettent de lire les coordonnées actuelles du cube.cube.facespermet de connaître les faces actuelles du cube.
méthodes
cube.position_ok()est vrai si le cube est à la bonne place mais pas forcément bien orienté.cube.orientation_ok()est vrai si le cube a les faces bien positionnées. Donc il est aussi au bon endroit.cube.should_be()renvoie les faces que devrait toucher ce cube pour être bien positionné,cube.should_be_xyz()renvoie les coordonnées de la position que devrait occuper ce cube pour être bien positionné,
