Un casse-tête où la moitié des mélanges est impossible
Le taquin tient en une phrase : quinze tuiles numérotées, une case vide, et l'ordre à reconstituer en faisant glisser les tuiles une à une. Ce qui en fait un bon prétexte technique, c'est un piège discret : si l'on mélange les tuiles au hasard, une configuration sur deux n'a aucune solution. Livrer une grille impossible à résoudre, c'est exactement le genre de bug silencieux que je traque — un jeu qui « marche » à l'écran mais frustre l'utilisateur sans jamais lever d'erreur.
La parité des inversions, l'invariant qui décide de tout
Chaque glissement de tuile ne change pas n'importe quoi au hasard : il préserve une quantité mathématique. On appelle inversion toute paire de tuiles dont l'ordre de lecture (de gauche à droite, de haut en bas) contredit l'ordre des numéros. Un déplacement horizontal ne touche à aucune inversion ; un déplacement vertical en modifie un nombre pair. Autrement dit, la parité du nombre d'inversions, combinée à la ligne où se trouve la case vide, reste invariante tout au long d'une partie. C'est ce couple qui sépare les grilles atteignables depuis la solution de celles qui ne le seront jamais.
Générer un mélange toujours résoluble
Sur une grille de largeur paire comme celle-ci, le critère est net : une configuration est résoluble si la somme du nombre d'inversions et du rang de la case vide compté depuis le bas est impaire. Je mélange donc les tuiles par un brassage de Fisher-Yates classique, puis je teste ce critère. S'il n'est pas respecté, je permute deux tuiles pleines : cet unique échange bascule la parité des inversions et rend la grille résoluble — sans coûter de nouveau mélange. Résultat : chaque partie proposée a, avec certitude, une solution.
Détecter la configuration résolue
La condition de victoire est la plus simple du jeu, et c'est voulu : après chaque glissement, je vérifie que les quinze premières cases contiennent 1 à 15 dans l'ordre et que la case vide occupe la dernière position. Une comparaison linéaire, sans structure superflue. Les tuiles déjà à leur place s'affichent en ambre : un retour visuel immédiat qui matérialise la progression, sans rien ajouter à la logique.
Pourquoi ce niveau de rigueur compte pour vos projets
Un taquin qui distribue des grilles insolubles ne plante jamais : il déçoit, discrètement, et on ne sait pas pourquoi. Sur une application métier, ce sont les mêmes défauts invisibles — un panier qui accepte un état impossible, un export qui produit un fichier subtilement faux — qui coûtent le plus cher à diagnostiquer. Comprendre l'invariant qui garantit qu'un système reste dans un état valide, et le vérifier avant de livrer, c'est précisément ce que j'apporte : des produits qui ne se contentent pas de s'afficher correctement, mais qui sont corrects.