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 !