|
|
|
La première étape de notre réflexion était de définir la structure du cube à implémenter.
|
|
|
|
|
|
|
|
2 choix s'offraient à nous :
|
|
|
|
|
|
|
|
1 - Opter pour une structure représentant toutes les facettes du cube, soit 48 facettes sur les 54 en tout, les 6 centrales étant inamovibles.
|
|
|
|
|
|
|
|
2 - Opter pour une structure représentant tous les petits cubes constituant le rubik's cube soit 20 petits cubes.
|
|
|
|
|
|
|
|
Nous pensions que choisir la seconde option serait plus intéressant étant donné qu'on devait permuter des petits cubes pour chaque mouvement et non des facettes, ce qui ferait beaucoup moins d'opérations. Or nous n'avions pas prévu que pour certains mouvements (les mouvements verticaux) on devait aussi permuter des facettes au sein d'un petit cube. Suite à ce constat nous avons décider de calculer le nombre d'opérations en moyenne afin de savoir si on devait changer notre structure (cf la page "Nb operations").
|
|
|
|
|
|
|
|
Après calcul on a 20 opérations d'affectations pour les facettes contre 17.4 opérations en moyenne pour les petits cubes, pour chaque mouvement.
|
|
|
|
|
|
|
|
Nous avons donc décider de garder notre première structure qui est plus économe en mouvements et aussi plus facile à utiliser/comprendre à nos yeux.
|
|
|
|
|
|
|
|
Les petits cubes sont donc représenter par leur emplacement :
|
|
|
|
|
|
|
|
PETITS_CUBES = ['FU','FRU','FR','FRD','FD','LFD','FL','LFU','LU','LD',
|
|
|
|
'BU','RBU','BR','RBD','BD','BLD','BL','BLU','RU','RD']
|
|
|
|
|
|
|
|
On distingue deux sortes de petit cube :
|
|
|
|
- les cubes coins (3 lettres)
|
|
|
|
- les cubes arêtes (2 lettres)
|
|
|
|
|
|
|
|
ex : FRU = Front-Right-Up, on fait donc référence au coin commun à la face avant (Front), à la face droite (Right) et à la phase du haut (Up)
|
|
|
|
|
|
|
|
Dans chaque petit cube, on stocke autant de chiffres qu'il y a de lettres, correspondant à leur couleur :
|
|
|
|
|
|
|
|
ex : dans FRU, on peut stocker 1,2,5 le 1 correspondant à la couleur de la facette de la face avant (F), le 2 correspondant à la couleur de la facette de droite (R) et le 5 correspondant à la couleur de la face supérieur (U)
|
|
|
|
|
|
|
|
on respecte ce code :
|
|
|
|
|
|
|
|
White (W) = 0
|
|
|
|
Blue (B) = 1
|
|
|
|
Red (R) = 2
|
|
|
|
Green (G) = 3
|
|
|
|
Orange (0) = 4
|
|
|
|
Yellow (Y) = 5
|
|
|
|
|
|
|
|
On a fait ce choix car le stockage d'un entier prend moins de place qu'un caractère en Python. |
|
|
|
\ No newline at end of file |