SudokuW.exe.txt
C'est une appli qui permet de jouer au Sudoku, et de créer des grilles de différentes difficultés de Sudoku.
Très simple d'accès.
(C'est une petite fenêtre de rien du tout !)
Pour Windows.
Il faut enlever l'extension .txt.
Pour que le fichier s'appelle juste SudokuW.exe. Et que vous puissiez l'exécuter. (En double-cliquant dessus)
Les modos pourraient me tuer de détourner le système de fichiers joints, mais vous avez forcément un anti-virus, donc si c'était un malware, vous seriez les premiers au courant.
Si vous avez un ordi récent, normalement, ça suffit.
Si vous avez un message comme quoi il manque des dll (ce qui est très improbable), installez
les redistribuables de visual studio 2012, c'est gratuit et très léger.
Mais normalement elles devraient déjà être installées car beaucoup de programmes les utilisent.
Au lancement, la grille est vide.
Il faut aller dans Menu->Nouvelle grille. Et soit entrer une grille que vous avez déjà (Editer…), soit en générer une automatiquement selon un niveau de difficulté.
Je vous mets au défi de réussir une grille générée en mode 'Très difficile'.

Perso, je n'ai jamais réussi.

(On est obligé de faire des hypothèses, et là ça se complique énormément).
Pour jouer, il suffit de cliquer sur une case et mettre un chiffre.
Si vous voulez-mettre une possibilité (des tout petits chiffres dans la case), il faut appuyer sur Maj avant, et réappuyer pour revenir à l'édition normale.
(La couleur de la sélection est bleue, mais change en vert quand on entre des possibilités).
Ce programme résout absolument tous les sudokus, et génère des grilles selon plusieurs difficultés de résolutions.
Vous pouvez sauvegarder votre partie pour la continuer plus tard.
Regardez le menu.
Le programme peut vous guider pendant la résolution.
En évitant les cas triviaux (genre 2 chiffres identiques sur une même ligne, etc …)
Et en vérifiant que le chiffre entré est le bon. (Car le programme connait toutes les valeurs, car il l'a résolu avant vous, dès l'affichage de la grille proposée).
(Ne cherchez pas à résoudre une grille vide, car je n'ai pas prévu ce cas. L'ordi va chercher à vous donner toutes les grilles de sudoku pleines possibles.
Windows vous dira que le programme ne répond pas. Normal. Fermez-le quand-même ce n'est pas grave).
Vu qu'on est sur un sujet de développeurs, j'explicite un peu le fonctionnement de ce programme.
Pour résoudre un Sudoku :
Tout est basé sur le backtracking, un algorithme de recherche qui est connu.
Algorithme qui teste toutes les possibilités en arborescence, et qui revient en arrière si une solution ne convient pas.
(Si 2 chiffres identiques sont dans la même cellule de 3x3, ou dans la même ligne, ou dans la même colonne).
J'utilise la récursivité. Mais on peut (comme pour tous les problèmes récursifs), utiliser une pile. Ce qui est souvent préférable si les contextes sont lourds en mémoire.
Mais là ce n'est pas le cas. Car on a juste un entier à stocker pour une possibilité. Et c'est plus simple !
Pour générer une grille :
Je commence par générer une grille pleine.
Pour simplifier, je résout un sudoku qui a toutes ses cases vides au début, et je choisis une grille parmi les solutions obtenues.
Bien-sûr, je ne génère pas toutes les possibilités, je prends des choix au hasard, sinon je ne serais plus là pour en parler.
Et je vide la grille au fur et à mesure. Tant que la grille est résoluble et qu'il n'y a qu'une solution. Au hasard, j'enlève un chiffre, et je vérifie cela.
Concernant la difficulté variable, je regarde la profondeur d'analyse qu'il faut pour déduire un chiffre d'une case.
Pendant le backtracking, je note la profondeur du nœud dans l'arborescence de déduction pour déduire un chiffre.
Et en fonction de la difficulté voulue par le joueur, j'essaie d'enlever un chiffre selon sa profondeur, et je résout le sudoku. S'il y a plusieurs solutions, j'essaie un autre chiffre.
Car un bon sudoku n'a qu'une seule solution.
[EDIT2]
Ce qui m'a motivé, c'est les cours de Prolog en Licence.
Et parce qu'on a eu un TP sur Prolog pour résoudre les sudoku.
Et qu'à cette époque j'étais fan de Sudoku.
Le problème, c'est qu'avec Prolog, il faut plusieurs secondes pour résoudre une grille.
Mais cela m'a servi, je ne veux pas être ingrat.
En Java, C, C++, C#, la résolution est instantanée à échelle humaine. Sauf qu'il faut implémenter soi-même le backtracking, c'est tout.
Et, à échelle humaine, on obtient la solution immédiatement.
Si j'avais utilisé Prolog pour générer les grilles très difficiles, il aura à peu près fallu une 1/2 heure.
En C++, un peu plus d'une seconde pour ce niveau de difficulté. Et ce serait pareil en C, Java ou C#.
Après on ne peut pas dire que Prolog est incompétent pour le back-tracking. C'est évident. Il a d'autres compétences et propriétés, comme le concept de contraintes, etc ...
Le code source :
SudokuW.rar
Après il n'est pas compilable tout seul, il faudrait que je rajoute des librairies.
Car j'utilisais les types List et Array que j'avais moi même crée. J'étais un peu naïf. (J'avais essayé de reproduire la même arborescence de classes collections que dans SmallTalk, cela m'avait pris 2 mois)
Et j'utilise ma librairie WindowDraw, qui permet de faire du tracé 2D dans une zone de la fenêtre.
Car il y a les std::vector et std::list, allez surtout sur le .cpp SudokuGrid.
Si quelqu'un veut vraiment le compiler, je mettrai en ligne mon dossier d'utilitaires Util.
[EDIT]
Après, j'ai fait ça comme ça.

Je m'en fous. (C'est juste qu'à ce moment de ma vie j'adorais les Sudokus).
Par contre si vous avez des problèmes pour exécuter le programme, j'essaierai de donner des solutions.
Mon hobby, c'est programmer des jeux vidéos. Et j'aimerais en faire mon métier.
C'est largement plus intéressant. C'est comme souvent, un mélange artistique, entre l'Art et la technique. Comme la pratique de la Musique.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.