====================================================== | SUDOKU | ====================================================== Pour compiler avec ocaml : ocamlc -o sudoku[.exe] Graphics.cma o_img.ml o_sudoku.ml o_sudoku2.ml o_sudoku3.ml o_sudoku4.ml Pour lancer : sudoku[.exe] [-v], si vous mettez -v vous serez en mode verbose. Vous pouvez modifier la variable dir de sudoku.ml et o_sudoku.ml en mettant le nom du répertoire où vous avez installé les fichiers. La variable dans sudoku_speed.txt détermine le temps pendant lequel les boutons restent allumés. La résolution par défaut est 1024x768 mais il suffit de modifier le paramètre de open_graph sinon, même s'il a été prévu de s'adapter à votre résolution. Pour profiter pleinement du graphisme des chiffres, il faut installer netpbm sous linux. Interface graphique ------------------- Pour rentrer une case dans la grille, il faut pointer cette grille avec la souris et entrer le chiffre. Cliquer n'est pas nécessaire, mais double-cliquer (pas trop vite) rentre le dernier chiffre tapé. Le chiffre 0 efface une case. Au début, vous pouvez saisir une grille ou demander qu'on vous en génère une aléatoirement. Vous pouvez aussi initialiser la randomisation en saisissant un nombre. Vous pouvez aussi charger une grille en saisissant son nom sans l'extension .sud. La résolution indique en vert les cases facilement trouvées, en cyan les cases déduites d'une stratégie des alignements ou des cliques, en bleu celles déduites des cases cyan, en jaune les cases où le parcours des autres possibilités s'est terminé en erreur, en bleu-vert les cases déduites des jaunes, en rouge les cases où il a fallu faire une hypothèse et en orange les cases qui s'en sont déduites. Si la grille n'a pas une solution unique le bouton résoudre s'allumera en orange, si vous rappuyez sur ce bouton, l'ordinateur essaiera de trouver toutes les réponses possibles pour les exhiber fièrement (du moins le nombre qu'il en a calculé avant que la mémoire explose, si vous vous amusez à le faire tourner sur une grille vide, petits malins), affiché en rouge au dessus des boutons si il a trouvé la totalité des solutions, en magenta sinon, et les cases où il a fallu faire une hypothèse seront affichées en magenta. Vous pouvez interrompre le calcul en cliquant ou en tapant une touche. Si la grille n'est pas valide, le bouton s'allumera en rouge. Nouveau : on peut faire défiler les diverses solutions et régler le niveau de recherche de solutions par la variable opt. Pour opt à zéro barres, le calcul est assez rapide, solution en profondeur (cases rouges) pour des possibilités dans l'ordre lexicographique. Pour opt à 1, l'ordre est celui du minimum des possibilités et s'il y a plusieurs cases rouges, elles sont indexées par une couleur dans le coin en haut à droite, et les cases oranges qui s'en déduisent _exclusivement_ auront l'index de la même couleur en bas à droite. Pour opt à 2, on cherche à minimaliser le nombre de cases rouges, cela peut être très long, surtout pour des sudokus "diaboliques". Pour opt à 3, on procède à un parcours en "largeur", on déduit les cases jaunes où il n'y a qu'un seul cas qui n'est pas ecarté, les autres aboutissants à une erreur. Les coins à droite indiquent le nb de parcours (en haut des cases jaune) et les cases jaunes et bleu-vert qui s'en déduisent, et à gauche les couples ou triuplets amenant à cette déduction, repérés par la couleur et non la position. Pour opt à 4 on tente de trouver en cyan des cases qui se déduisent à partir des stratégies des alignements et des cliques, et en bleu les cases qui s'en déduisent, on finit par un parcours en profondeur. Pour opt à 5 on effectue toutes les techniques précédentes. Pour un petit nombre de cases cyan (inférieur à 36), les cases bleues se déduisent des cases cyan ayant la même couleur et un coin symétrique horizontalement. Si comme pour g3 il y a trop de cases cyan, on fait une association directe couleur et position. Le bouton vérifier vous permet de vérifier l'unicité de la solution d'une grille. Si c'est le cas, le bouton s'allumera en vert. Il permet aussi de vérifier si vous n'avez pas fait d'erreurs, dans le cas contraire, le bouton s'allumera en rouge. Enfin si la grille est valide mais présente plusieurs solutions, le bouton s'allumera en orange. Le bouton indice tente de vous donner un indice sur une case par ordre croissant de difficulté. Si le bouton s'allume en vert, c'est qu'il reste des cases faciles. Si vous rappuyez, il indiquera la case en question. S'il ne reste plus de cases faciles, il tentera d'éliminer des possibilités par la stratégie des alignements ou des cliques. S'il y a des possibilités encore à barrer, le bouton s'allumera en gris. Les cases qui s'en suivent apparaissent en cyan et les cases déduites de celles-ci seront affichées en bleu. S'il n'y arrive pas, le bouton s'allumera en jaune. Si vous rappuyez, il tentera de vous donner un indice un peu plus dur en jaune. Si le prochain indice en découle facilement, il apparaîtra en bleu-vert. S'il n'y plus d'indice jaune, le bouton s'allumera en magenta. Si vous rappuyez il tentera de vous donner un indice de difficulté maximale en rouge ou magenta si la solution n'est pas unique. Les indices qui en découlent seront affichés en orange. Si la grille n'est pas valide, le bouton s'allumera en rouge. Enfin, s'il y a plusieurs solutions, ce bouton ne vous le signalera pas et résoudra la première des solutions mais affichera les indices normalement rouges en magenta. Le bouton case/possibilité est un interrupteur qui vous permet d'inscrire dans une case soit une valeur pour la case, soit une des possibilités restantes. Le bouton calcul poss. calcule les possibilités et les affiche. S'il ne trouve aucune différence avec les possibilités que vous avez saisies, le bouton s'allume en vert, sinon il s'allume en bleu et les différences s'affichent aussi en bleu. Le bouton sauver permet de mémoriser la grille telle qu'elle est, saisissez le nom du fichier sans l'extension .sud. Si la sauvegarde réussit, le bouton s'allumera en vert. Vous pouvez même sauver l'image de la grille. Le bouton reset réinitialise la grille. Le bouton new relance le programme, et le bouton quit permet de sortir.