Il existe 43 252 003 274 489 856 000 états atteignables d’un Rubik’s Cube 3×3×3.
Alen Yohannan a décidé d’en faire une scrollbar.1
EveryCube affiche une règle allant du cube résolu jusqu’au dernier état de cet espace combinatoire. On peut faire glisser le curseur, taper un index ou sauter vers des motifs connus comme le Superflip. Le cube 3D se transforme en direct.1
Évidemment, le site ne possède pas une base de données avec 43 quintillions de lignes. Même les startups n’ont pas encore trouvé assez de crédits cloud pour cette idée.
L’astuce consiste à transformer un nombre en état de cube.
Quatre coordonnées suffisent
Le code découpe un index entier en quatre coordonnées classiques du cube :
- orientation des 12 arêtes, avec 11 valeurs indépendantes :
2^11possibilités ; - orientation des 8 coins, avec 7 valeurs indépendantes :
3^7possibilités ; - permutation des 8 coins :
8!possibilités ; - permutation des 12 arêtes, liée à la parité des coins :
12!/2possibilités.3
Le produit donne exactement 43 252 003 274 489 856 000.3
Le site utilise ensuite une représentation à base mixte pour décomposer n’importe quel index dans ces quatre espaces. L’opération inverse permet de prendre un état et de retrouver son numéro.2 3
C’est ce qu’on appelle ici le couple rank/unrank.
Le nombre n’est donc pas une position dans un tableau géant. Il est une description compacte de la position.
Le navigateur fabrique l’état au moment où vous le demandez
Quand la règle bouge, EveryCube calcule les orientations et permutations correspondantes, place les cubies puis laisse react-three-fiber afficher et animer le résultat.2
Le README est assez fier de l’absence de backend et de base de données. L’application peut être déployée comme site statique.2
C’est le déplacement intéressant.
Quand un espace est gigantesque mais possède une structure mathématique claire, l’index peut remplacer le stockage.
On ne conserve pas chaque possibilité. On conserve la règle qui permet de reconstruire celle qu’on veut.
Les états illégaux sont éliminés dans le calcul
Un Rubik’s Cube ne permet pas n’importe quelle permutation arbitraire des autocollants.
Par exemple, la parité de la permutation des arêtes doit correspondre à celle des coins. Le code d’EveryCube choisit donc, pour chaque rang d’arêtes, la permutation de la bonne parité.3
Les orientations possèdent également leurs contraintes. L’orientation du dernier coin est déterminée par les sept premiers. Même chose pour la dernière arête afin de conserver une somme d’orientations valide.3
Ce détail est important. EveryCube ne parcourt pas toutes les images colorées qui ressemblent vaguement à un cube. Il parcourt les états mécaniquement atteignables selon son modèle du 3×3×3.
Même les raccourcis célèbres sont vérifiés
La règle contient des marqueurs pour des motifs connus.
Le projet ne stocke pas simplement un index recopié depuis Internet pour le Superflip ou le damier. Le README explique que Superflip est construit depuis sa définition puis vérifié par un aller-retour dans le système de ranking. Le damier est produit par un petit moteur de mouvements et vérifié visuellement par une règle sur les couleurs alternées.2
Ces checks s’exécutent au chargement du module, selon l’auteur, afin qu’un mauvais marqueur ne puisse pas apparaître silencieusement.2
C’est beaucoup de sérieux pour une scrollbar de cube. Donc exactement la bonne quantité.
Une immensité devient une interface
EveryCube est un projet de quelques jours. Son dépôt a été créé le 8 août et ne possède pas encore de licence explicite.2
Il ne faut pas le transformer en nouvelle plateforme mathématique mondiale.
Comme objet interactif, il montre cependant une manière très nette de rendre un nombre absurde compréhensible.
Écrire « 43 quintillions » ne donne presque aucune intuition. Faire glisser une règle qui couvre cet espace n’en donne pas beaucoup plus sur sa taille réelle, mais transforme au moins la quantité en territoire parcourable.
Le plus étrange est que le territoire n’existe jamais en entier.
À chaque position de la règle, le navigateur reconstruit juste le petit morceau demandé, puis l’oublie lorsqu’on passe au suivant.
Quarante-trois quintillions d’états, zéro table de quarante-trois quintillions de lignes.
Parfois, la meilleure base de données est une fonction.