Are Uppman
Home>sudoku

English version here         SUDOKU      Voir explications ci-après




Si l'applet n'apparaît pas juste au-dessus de ce texte, c'est probablement que votre
navigateur favori (Firefox, IE...) ne supporte plus les applets java.
Pendant encore quelque temps vous pouvez essayer une version plus ancienne.
Si vous avez installé JDK vous pouvez aussi utiliser AppletViewer avec l'URL de cette page.
Oracle a prévu la fin définitive des Java Applets, y compris AppletViewer, dans Java 9.



NOUVEAU:
Une technique OCR vous permet d'importer (par tirer-déposer ou copier-coller)
l'image (JPG, PNG, GIF) d'une grille Sudoku ou la capture écran d'une grille.
Voir explications ici

Le programme ci-dessus est conçu pour offrir une aide adaptée au souhait du joueur.
L'aide peut consister en
  • la possibilité de se passer du crayon et de la gomme
  • un retour en arrière par les commandes de navigation
  • l'obtention d'indications colorées quant aux raisonnements qui peuvent être appliqués
  • une simplification rapide de la grille à l'aide de commandes appropriées
  • une estimation rapide la difficulté de la grille en vérifiant quelles sont les techniques de résolution indispensables

  Pour utiliser ce programme

Le plus direct est de jouer la grille proposée. Elle est tirée au hasard dans une liste de 48826 grilles minimales compilées par Gordon Royle.

Le menu Charger permet de jouer une autre des grilles de Royle ou une parmi 1465 grilles diaboloques de magictour dont je reparlerai plus loin.

Vous pouvez aussi commencer par coller une version texte ou la capture d'écran d'une grille sudoku de votre choix dans le programme (attention, pour cela il faut d'abord autoriser l'échange avec le presse-papier). Vous pouvez enfin saisir les valeurs à la main.

  Saisir à la main

Vérifiez que "Saisir nouvelle grille" est coché. Rentrez les chiffres de votre grille dans les cases (vérifiez notamment que le dernier chiffre est bien entériné grâce à la touche "entrée"). Pour saisir le chiffre d'une case, cliquez sur la case, tapez le chiffre, puis cliquez sur la case suivante à saisir ou utilisez les touches fléchées. Pour effacer un chiffre déjà rentrée, frappez un caractère quelconque ou double-cliquez dans la case, sélectionnez tout le contenu de la case puis supprimez le tout


  Jouer

Quand votre grille est prête, cochez "Jouer la grille". Vous voudrez probablement aussi cocher "candidats" pour voir les chiffres a priori possibles pour chaque case.

Vous pouvez alors jouer sans aide en sélectionnant une case et en éditant son contenu dans le petit éditeur nommé "Editer case sélectionnée".

Vous pouvez aussi voir les suggestions du programme en autorisant les "Techniques" de résolution correspondantes.

Un clic droit dans une cellule fait apparaître un menu contextuel qui vous permet de simplifier la grille par la technique attachée à cette cellule et de mettre en évidence les cases et les chiffres candidats qui sont impliqués

Vous pouvez enfin procéder rapidement en appliquant les simplifications qui correspondent aux diverses stratégies en utilisant les boutons "Simplifier" adéquats.



Si nécessaire vous pouvez revenir en arrière avec "défaire", et éventuellement "marquer" une étape pour y revenir d'un seul coup plus tard par "retour" (on ne peut mettre qu'une seule marque à la fois).

Pour estimer la difficulté de la grille, commencez par cocher deux ou trois des techniques les plus simples, puis utilisez les boutons "simplifier" correspondants. Si à un moment donné le programme ne suggère aucune technique, cochez-en une supplémentaire. Si aucune suggestion n'apparaît, décochez-la et essayez une autre technique. Il existe des grilles (très difficiles) dont ce programme ne sait pas suggerer une solution complète.

Import / export

Import d'une image et OCR (L'import / export utilise le presse-papier : il faut autoriser l'échange pour en bénéficier).

Beaucoup de sites proposent des grilles sous la forme d'images JPG, GIF ou PNG. Vous pouvez les importer dans le programme par un simple tirer-déposer ou un copier-coller. Lorsqu'une grille est proposée sans être une image d'une de ces formes, vous pouvez toujours l'importer en réalisant d'abord une capture d'écran.

Pour ce faire, utilisez l'outil de capture de Vista ou de Windows 7 ou un outil comme PrtScr. Commencez par capturer l'image de la grille en sélectionnant le rectangle correspondant de l'écran, y compris le trait de son bord ; copiez la capture dans le presse-papier, puis dans le menu de mon programme cliquez l'option "Import/export > coller".

Cette reconnaissance optique des caractères "faite maison" n'est pas parfaite, mais elle fonctionnera pour la quasi-totalité des grilles bien contrastées et avec une fonte nette.

Import d'un format texte (L'import / export utilise le presse-papier : il faut autoriser l'échange pour en bénéficier).

Les grilles à importer doivent se présenter selon un des formats texte suivants :
9 lignes à 9 caractères (les points seront compris par le programme comme étant des cases vides)

....81.9.
.43......
...9..26.
......6..
...2..7..
28..69...
472......
....5.3..
3.6.24...

Plus généralement le programme lit tout texte en ignorant tout caractère autre que .0123456789 et en interprétant le point "." et le chiffre "0" comme des cases vides, donc

3 2 9 | 4 1 . | 7 . .
. . . | . . . | 4 . .
. . 5 | . 2 . | . . .
---------------------
5 . . | . . . | 3 . 6
. 6 . | 7 . 3 | . 9 .
8 . 7 | . . . | . . 2
---------------------
. . . | . 4 . | 8 . .
. . 6 | . . . | . . .
. . 3 | . 7 2 | 9 5 1

et
800009406060240013000600005026300008380000050400807360908003000610082030203900001

seront correctement lus (essayez de les copier-coller dans l'applet).
Un format où les positions des cellules sont indiquées par des tabulations est aussi accepté : un chiffre peut ou non être présent en chaque position.

Enfin il est possible d'mporter et d'exporter des grilles avec les candidats comme recommandé sur le site Sudopedia.

Il existe des sites qui vous proposent des grilles sous un de ces formats. Par exemple magictour dont je recommande cette liste de 1465 grilles difficiles, dont certaines (surtout au début) exigent la technique Promotion Déniée, ou encore chez j.-p.davalan ou sudocue. Un site utilisant le format positionnel est lemo: cliquez sur un des trois 3x3 types de grilles puis sélectionnez toute la grille et copiez-collez-la dans mon applet. La presse papier est une source inépuisable d'une grande variété de grilles. Mais si aucun site ne présente le sudoku du jour sous une version copiable, il ne vous reste qu'à transcrire la grille à la main (c'est apparemment actuellement le cas du journal Le Monde, fourni par Yan Georget, et même si Koalog en présente une autre grille sur le site du journal, celle-ci n'est pas copiable).

Si vous saisissez une grille à la main, pensez à l'exporter pour la coller dans un éditeur puis la sauvegarder sur votre disque dur. Cela vous permet de facilement la ré-entrer ultérieurement dans l'applet par un simple copier-coller.

Autoriser l'import / export par le presse-papier

Il est probable que la configuration de votre installation Java vous interdise l'opération de collage dans une applet.

Pour autoriser l'échange avec le presse-papier à mon programme, procédez comme suit :

Ouvrez un éditeur de texte simple comme EditPad Lite. Cherchez le fichier .java.policy (y compris le point préfixé : c'est important) dans votre dossier utilisateur (par exemple avec Windows XP, si votre identité de session est "moi" ce sera probablement "C:\Documents and Settings\moi"), ouvrez-le et ajoutez à la fin ces trois lignes (y compris les accolades et point-virgule).

grant codeBase "http://areu.free.fr/sudoku/*" {
  permission java.awt.AWTPermission "accessClipboard";
};

Si ce fichier n'existe pas, créez-le, et si votre éditeur ne vous laisse pas créer un fichier dont le nom commence par un point, utilisez EditPad lite !

Une alternative est d'utiliser l'outil policytool de votre installation Java : démarrer > exécuter policytool.exe

Vocabulaire et références

Sudoku est un puzzle, un jeu de réflexion. Il s'agit de compléter la grille de 9x9 cases de telle sorte que sur chaque ligne, chaque colonne et chaque bloc (ou région) de 3x3 cases l'on trouve représenté chacun des chiffres de 1 à 9.

L'article de Wikipedia Sudoku donne une bonne introduction à ce jeu et son origine. Une recherche sur Internet donnera un foule d'autres sites, souvent avec un matériel très bien fait. Si vous cherchez une documentation très pointue, consultez Sudopedia (en anglais).

La terminologie française (et anglaise) peut varier un peu. J'ai essayé de suivre celle de l'article de Wikipedia. Dans le lexique ci-après j'ai mis en italique et entre parenthèses les noms anglais des différentes techniques.
  • J'appelle unique ou singleton (single candidate) un chiffre qui est le seul candidat dans sa case (tous les autres chiffres étant déjà présents sur la ligne, la colonne ou le bloc 3x3 contenant la case).
    Un tel candidat doit évidemment être promu chiffre définitif de la case (ou "révélé").
  • Un chiffre est bloqué en ligne (resp. colonne) (candidate line, pointing candidate) dans un bloc 3x3 s'il n'est pas présent sur une autre ligne (resp.colonne) dans ce bloc.
    On peut alors éliminer ce chiffre des autres cases de la ligne (resp. colonne) hors le bloc.
  • Deux chiffres forment une paire (naked pair) s'ils sont candidats uniquement dans deux cases de la même ligne (resp. colonne, bloc).
    On peut alors éliminer ces deux chiffres des autres cases de la ligne (resp. colonne, bloc).
On peut mener un raisonnement similaire sur des triplets (naked triples) avec au plus les trois mêmes chiffres (ou plus généralement des n-uples ou "groupes" de n chiffres).
  • Un X-wing est formé si un chiffre candidat est présent seulement dans deux colonnes d'une ligne, et aussi seulement dans les deux mêmes colonnes d'une autre ligne (ces 2 lignes et colonnes forment un 2-"canevas").
    On peut alors éliminer ce chiffre des autres lignes des deux mêmes colonnes.
On peut mener un raisonnement similaire sur trois ou plus lignes et colonnes (Swordfish, Jellyfish...) : n-canevas quelconque.
  • Une suite de cases où ne reste que le choix entre deux valeurs et où les valeurs sont xy, yz, zu... a la propriété que le choix de la valeur de la première case impose celle des autres. Dans ce cas on est en présence d'une chaîne circulaire sur les valeurs si le choix de y dans la première aboutit à x dans la dernière. Si la chaîne est aussi circulaire sur les cases (case de départ = case d'arrivée) x doit être la valeur de cette case. Sinon on peut supprimer x des parties communes des lignes, colonnes ou blocs des deux cases (XY-Wing, XY-chains, Forcing chaines).
Le programme détecte aussi le cas particulier des XYZ-Wing.
  • Les Nice loops sont un cas très général de d'enchainement d'inférences du genre "si j'ai x ici je ne peux pas l'avoir là donc..." ou la réciproque de telle sorte que l'enchaînement forme une boucle fermée. Selon la façon dont la boucle se referme on dit qu'elle est continue ou discontinue. Dans les deux cas elle peut donner lieu à des éliminations de candidats. Pour plus de renseignements, consulter cette page de Paul Stephens (en anglais). Veuillez noter que la recherche de Nice Loops peut dans certains cas demander beaucoup de temps !
  • Certains cas peuvent être reconnus qui "cachent" un des précédents :
    unique caché (hidden single, single position ) : un chiffre candidat s'avère n'être présent que dans une case d'une ligne (colonne, bloc), on peut supprimer les autres candidats dans cette case ;
    paire cachée (hidden pair) : deux chiffres candidats ne sont présents que dans deux cases d'une ligne (colonne, bloc), on peut supprimer les autres candidats dans ces deux cases ;
    triplet ou n-uple caché : similaire ;
    bloqué caché (line-box reduction) : un chiffre sur une ligne (colonne) est bloqué dans un bloc (absent de la ligne ou de la colonne hors ce bloc), on peut alors supprimer ce candidat des autres cases du bloc.
  • La dernière technique, Promotion Déniée, est une technique pratiquement impossible à mettre en oeuvre à la main sauf dans ses formes les plus simples. Je me suis inspiré de ce texte de Bob Hanson (en anglais).

    L'idée est la suivante : on choisit un candidat dans une case et on le promeut. Cette promotion impliquera une simplification de la grille, et certains autres candidats dans d'autres cases vont se retrouver seuls dans leur case ou seuls sur leur ligne (ou colonne ou carré). Les techniques "unique" et "unique caché" nous autorisent donc à les promouvoir aussi. Nous aurons ainsi une réaction en chaîne qui peut se terminer de trois façons

    - une erreur apparaît dans la grille. Le candidat initial n'est pas promouvable. Nous pouvons donc l'éliminer de la case !
    - aucune nouvelle promotion n'est possible. Nous ne pouvons pas conclure ni évidemment supprimer le candidat
    - nous aboutissons à la solution de la grille.

    Cette dernière possibilité fait qu'on peut prétendre que ce type de technique n'est pas une "vraie" technique mais seulement du "essai-erreur". C'est pourquoi l'algorithme s'impose deux "aveuglements"

    - si la grille est résolue, tout ce que l'algorithme voit, c'est qu'aucune nouvelle promotion n'est possible ; ce cas sera donc traité comme le second cas de fin de la réaction en chaîne
    - une limite sur le nombre d'itérations (réactions en chaîne) est imposée. Par défaut cette limite est 2 (vous pouvez la choisir entre 1 et 20). On peut prétendre que pour les valeurs 1 et 2 la méthode est parfaitement réalisable à la main, c'est alors une technique "normale".

    La technique peut être généralisée, car après la promotion du candidat initial on peut en fait utiliser d'autres techniques que les seules "unique" ou "unique caché" pour simplifier la grille et essayer d'aboutir à une erreur. Dans le menu vous disposez donc de trois "forces" :

    - basique, les itérations n'utilisent que les tecniques "unique" et "unique caché"
    - avancée, on y ajoute les "bloqués" et les "paires", "triplets", "n-uples"
    - complète, on utilise toutes les techniques sauf "Promotion Déniée".

    Lorsque la technique "Promotion Déniée" est activée, l'algorithme cherche dans chaque case la première promotion déniée trouvée. Il peut donc y avoir d'autres dans la case, mais elles ne seront pas recherchées cette fois-ci. Sachez enfin que cette technique peut exiger beaucoup de temps pour analyser une grille, puisque pour chaque case elle met autant de temps que normalement pour une grille entière multiplié par le nombre d'itérations nécessaires et le nombre de candidats envisagés dans la case ! C'est une bonne idée de garder un oeil sur la Console Java pour voir que les choses avancent, et ne pas confondre le temps d'attente avec un plantage !


Site updated 08 May, 2017    Remarks and questions? areusite at free dot fr