Enable build support by adding .onedev-buildspec.yml
README.md Loading last commit info...
kube.py
kube_prototype.py
main.py
README.md

Kube

Une implémentation du célébre Rubik's Cube.

Structure générale

Le code implémente une représentation complète d'un Rubik's Cube de 3x3x3 en Python. L'implémentation offre une API intuitive pour manipuler le cube.

Composants principaux

Énumérations

  • Face: Les 6 faces du cube (UP, LEFT, FRONT, RIGHT, BACK, DOWN)
  • Rotation: Types de rotations (CLOCKWISE, COUNTERCLOCKWISE, HALF_TURN)
  • Color: Les 6 couleurs standard (YELLOW, RED, BLUE, GREEN, ORANGE, WHITE) + 1 couleur de test/debug
  • Axis: Axes de rotation (X, Y, Z)

Classes

  • RubiksCube: Classe principale représentant le cube
  • _Face (classe interne): Représente une face individuelle du cube

Fonctionnalités

  1. Représentation de l'état du cube:

    • Structure de données 3D (6 faces × 3 lignes × 3 colonnes)
    • Chaque cellule contient une valeur entière représentant une couleur
  2. Manipulation du cube:

    • Rotation de faces individuelles (rotate_face())
    • Changement d'orientation du cube (set_front() ou rotate())
    • Mélange aléatoire (shuffle())
  3. Interface utilisateur:

    • Affichage en couleur dans le terminal
    • Accès aux faces par position (UP, LEFT, etc.)
    • Accès aux faces par couleur (YELLOW, RED, etc.)
    • Vérification de l'état résolu (is_solved())

Points d'amélioration

  1. Documentation limitée: Certaines méthodes manquent de docstrings explicites
  2. Optimisations possibles: Les opérations de copie pourraient être optimisées
  3. Tests: Absence de tests unitaires pour valider le comportement opérations

Complexité technique

La partie la plus complexe concerne les rotations de faces, qui nécessitent:

  1. La rotation de la face elle-même
  2. La mise à jour des bordures des faces adjacentes

Cette compléxité a été surmontée graçe, notamment, à la classe interne _Face et ses methodes, __getitem__ et __setitem__, permettant la rotation des bandes tout en conservant un code claire.

# Extrait pour la rotation horaire de la face FRONT
self.UP[2], self.RIGHT[:, 0], self.DOWN[0, ::-1], self.LEFT[::-1, 2] = \
    self.LEFT[::-1, 2], self.UP[2], self.RIGHT[:, 0], self.DOWN[0, ::-1]

La première ligne identifie les quatre bordures qui doivent être échangées ainsi que leur orientation (avec ::-1 pour indiquer une bande en sens inverse). Ces quatre bordures se voient assigner leures valeurs après avoir subi une rotation (UP->RIGHT->DOWN->LEFT->UP), le tout en une seule opération grâce au déballage de tuples (tuple unpacking) de Python.

Please wait...
Page is in error, reload to recover