π
<-

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

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

Unread postby critor » 13 Apr 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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48%
 
Posts: 41980
Images: 15877
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Return to News Casio

Who is online

Users browsing this forum: No registered users and 3 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
968 utilisateurs:
>910 invités
>51 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)