π
<-
Chat plein-écran
[^]

Sudoto : solutionneur Sudoku en Python pour Graph 90/35+E II

Sudoto : solutionneur Sudoku en Python pour Graph 90/35+E II

Message non lude critor » 13 Avr 2023, 21:48

Le Sudoku dans sa forme la plus répandue consiste à compléter une grille de 9×9 cases avec les chiffres de 1 à 9, de sorte à ce que chaque chiffre apparaisse exactement une fois dans chaque bloc.

Chaque case appartient à 3 blocs qui sont :
  • la ligne
  • la colonne
  • l'un des 9 carrés juxtaposés de 3×3 cases

Nous nous proposons ici de résoudre des grilles de Sudoku en Python sur calculatrices Casio Graph 90/35+E II, fx-9750/9860GIII et fx-CG50.

Mais comment résout-on un Sudoku ?

Une première méthode naïve est d'inscrire les 9 chiffres possibles dans chaque case vide, puis de procéder par élimination en rayant de chaque case ainsi complétée les chiffres apparaissant déjà dans chacun des 3 blocs concernés :
  • sur la même ligne
  • sur la même colonne
  • dans le même carré
Lorsqu'il ne reste plus qu'un seul chiffre c'est celui à inscrire dans la case, et il peut alors à son tour être utilisé pour affiner les déductions sur les cases restantes.

Sur les grilles les plus simples comme la précédente, cette règle permet d'induire 352 déductions et suffit à remplir l'ensemble de la grille.
Mais parfois cela ne suffira pas comme ici :

Après 297 déductions qui n'ont permis de remplir que 4 cases nous voilà avec une grille non remplie sur laquelle on ne peut pourtant plus rien déduire.

Rajoutons donc quelques stratégies :
  • Nous pouvons citer la méthode des paires exclusives : si 2 cases non résolues d'un même bloc n'admettent plus qu'une même paire de 2 chiffres
    $mathjax$\left(a_1, a_2\right)$mathjax$
    , alors ces 2 chiffres sont impossibles sur toutes les autres cases du bloc.
  • De là nous pouvons passer à la méthode des triplets exclusifs : si 3 cases non résolues d'un même bloc n'admettent plus que tout ou partie d'un même triplet de 3 chiffres
    $mathjax$\left(a_1, a_2, a_3\right)$mathjax$
    , alors ces 3 chiffres sont impossibles sur toutes les autres cases du bloc.
  • La même stratégie peut être formulée pour les quadruplets et même généralisée jusqu'aux N-uplets de dimension
    $mathjax$N=8$mathjax$
    .
De façon générale donc, si N cases non résolues d'un même bloc n'admettent plus que tout ou partie d'un même N-uplet de N chiffres
$mathjax$\left(a_1,a_2,a_3, ..., a_N\right)$mathjax$
, alors ces N chiffres sont impossibles sur toutes les autres cases du bloc.

On peut même aller encore plus loin et constater que la toute première méthode naïve n'est qu'un cas particulier de cette stratégie étendue que nous venons de formuler, si bien que tout ce qui a été évoqué jusqu'ici peut être vérifié via un unique appel de fonction.
Cette règle étendue nous permet certes d'aller plus loin avec 337 déductions ayant permis de remplir 11 cases, mais ce n'est hélas pas encore suffisant pour venir à bout de la grille précédente. L'application jusqu'ici des seules stratégies précédentes nous a conduits de nouveau à une grille non remplie.

En fait il existe d'autres stratégies, et plus les grilles se compliqueront plus il sera nécessaire d'en invoquer plusieurs.

Une autre stratégie devenant pertinente une fois que les précédentes ne donnent plus rien, est de procéder par essais-erreur et retour arrière (backtracking) :
  1. on sauvegarde l'état de la grille
  2. on choisit une case non encore déduite parmi celles offrant le moins de possibilités
  3. on fait alors un pari : on y inscrit l'une des valeurs possibles et on l'utilise pour reprendre les déductions précédentes
  4. si ces déductions nous conduisent à une impasse (case avec plus aucune valeur possible), alors c'est que le pari que nous avons fait n'était pas bon - on revient en arrière pour parier une autre valeur sur la case en question
  5. si ces déductions s'achèvent sur une grille inachevée, on recommence : nouvelle sauvegarde avec choix d'une nouvelle case pour des paris supplémentaires

Avec tout ceci nous arrivons à conclure cette fois-ci. 9 paris, ici tous justes, nous permettent de pousser jusqu'à 467 déductions et remplir toute la grille.

Notre script Python est-il bien capable de s'en sortir dans tous les cas ? Pour le vérifier, attaquons-nous à "Al Escargot", réputée pour être la grille de Sudoku la plus difficile.

Le site spécialisé Parfum-Echecs estime sa difficulté à 40 étoiles. Pour référence chaque étoile nécessite au minimum autour de 50 coups, et les Sudoku de la presse ne dépassent jamais les 7 étoiles (au minimum dans les 350 coups). Ici avec 40 étoiles, dans le meilleur des cas nous en sommes déjà à 2000 coups.

Et bien notre script Python arrive à résoudre la grille la plus dure du monde !


Les performances sont toutefois en-deça de l'estimation puisque nous avons ici 3729 coups, répartis en :
  • 3654 déductions de valeurs de cases
  • 75 paris
Le nombre important de paris majoritairement faux pourrait être économisé en rajoutant d'autres méthodes de déduction.

1678416783Tu peux dès maintenant télécharger et tester notre programme de résolution Sudoto dans l'application Python de ta calculatrice Graph 90+E, Graph 35+E II ou compatible.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.6%
 
Messages: 41501
Images: 14719
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Retourner vers News Casio

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 139 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1862 utilisateurs:
>1844 invités
>14 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)