Zudoku 1.3
Un certain 26/06/2008, une news site sur le Site du Zéro. Cette news annonce une grande nouvelle, les concours sont de retours, et ils sont en forme. Bon pour moi qui ne suis utilisateur du site du Zéro que depuis un an ce n'est donc pas un retour mais plutôt un nouveau module. Le premier concours est en C++ et sur le fameux jeu du sudoku ... génial ! J'étais justement en train de finir de lire le tutoriel sur le C++. Finalement je me dis que le concours est prévu pour que tout le monde puisse y arriver, je me lance donc dans la conception de la partie minimum pour participer au concours mais ne m'inscris pas au concours sans l'avoir au moins finie. Finalement en ce 31 juillet, dernier jour avant la fin du concours, je me retrouve ici à rendre un programme qui m'aura beaucoup aidé à évoluer. Et sûrement aussi aidé à mieux coder, mais attention. Je suis encore débutant en la matière. Je me rend bien compte qu'il y a bien mieux mais j'ai quand même apprécié cette expérience et je vais peut-être même produire d'autres versions du sudoku.
Voici quelques explication sur mon programme. Distribué sous GPL v3. Pour le lancer, il vous faudra faire qmake(-qt4) puis make et lancer le programme. Enjoy !
Le Programme
Zudoku est en ce moment dans sa version 1.3. Honnêtement à chaque fois que j'ajoute quelque chose d'intéressant je rajoute 0.1 au numéro de version. Ce qui signifie que ce chiffre ne veut en faite rien dire. Trêve de bla-bla. Voici les fonctionnalitées, et informations importantes qui valent le coup de développer un peu ici.
Information concernant l'orthographe/grammaire/syntaxe
Concernant ce premier points, je souhaitais absolument m'excuser. Tout d'abord pour les accents, car ils sont absents à l'appel et ceci dû au faite qu'ils font tout simplement « buguer » mon programme. Ce n'est pas à proprement parler un bug puisque tout les scriptes marchent. Mais ils apparaissent d'une drôle de façon (sûrement un problème d'encodage), et j'ai également un autre problème liée aux accents dans code::blocks.
Je voulais également m'excuser s'il reste des fautes d'orthographe ou de grammaire ici ou dans le programme.
Chargement de grilles
Les grilles sont chargées à partir de fichiers *.txt . Il se passe en une ou deux étapes. Soit on vous demande juste le niveau, si vous avez demandé à charger la grille aléatoirement, sinon on vous demande également le numéro de la grille que vous voulez charger.
Vérification
Depuis la première version, je pense que c'est le script ayant le plus évolué. Au départ, je ne m'étais pas vraiment cassé la tête pour coder ce script. Et ceci a donner un script qui faisait pas moins de 6500 itérations. Car j'avais imbriqué une boucle de 81 itérations dans une deuxième boucle de 81 itérations afin de vérifier les cases une par une. Depuis je suis passé à 243 itérations maximum. Je pense donc que ce script a vraiment subi une grande évolution.
Le Principe de la Vérification
Pour la vérification, le principe est simple. On part du fait que la grille de sudoku n'est valide que si tout les cases sur les lignes, colonnes et blocs sont remplies différemment. Ainsi je me base dessus pour vérifier les lignes, puis les colonnes et enfin les blocs. D'origine on estime que la grille est valide au départ puis on la met invalide si l'on détecte une erreur.
Résolution
Là, on peut dire que le concours m'a fait évoluer. Car il m'a fait tester de nouvelles choses, et entre autres la conception d'algorithme. Une grande avancé. Et apparemment même si ce début aurait pu être mieux, je m'en sort pas trop mal. Mon algorithme est encore à améliorer car il ne résout que les grilles de niveau facile (niveaux 1 à 3 dans les cahiers). Question temps, il est plutôt efficace, si l'idée que je me fait d'un bon temps est bonne, car je ne l'ai pas chronométré.
Le Principe de la résolution
Ainsi le principe de la résolution est également simple. Chaque cases a 9 attributs de type bool qui représentent chacun la possibilité ou non que le chiffre soit présent dans la case. Ainsi on passe sur toute les cases plusieurs fois, on met à jour les possibilités, et si une case n'a plus qu'une possibilité, on la remplit. Voilà le principe de mon algorithme de résolution.
La grille
Cela fait maintenant un certain temps que vous jouez à Zudoku ? Vous souhaitez ajouter des grilles au programme car les 428 grilles de la bibliothèque ne vous suffisent pas ? Eh bien voici comment procéder.
Organisation de la grille
Voici l'organisation de la grille. Chacune des cases est située avec un abscisse, une ordonnée et un bloc. Ainsi, cela permet d'avoir toute les cases bien repérées sur la grille, ce qui permet d'éviter beaucoup de lignes de codes.
Maintenant que vous savez comment est organisée la grille, nous pouvons voir comment ajouter des grilles.
Ajouter des grilles
Pour ajouter des grilles, rendez-vous dans le dossier du programme puis dans le dossier grilles. Vous y trouverez 4 fichiers. Le premier se nomme bibliothèque, il regroupe l'ensemble des grilles. Il y a également 3 autres fichiers qui sont classés par niveau de difficulté. Dans ces fichiers vous trouverez un certain nombre de lignes, chaque ligne représente une grille. Pour en ajouter une, voici comment lire votre grille:
Et ainsi, vous tapez les chiffre dans l'ordre où vous les lisez, si la case est vide d'origine, entrer le 0. Si vous utilisez la première méthode de lecture, votre grille sera exactement comme sur le papier, cependant si vous utilisez la seconde méthode, votre grille sera toujours tout aussi valide. Ce sera juste une rotation autour de la diagonale partant du coin en haut à gauche vers le coin en bas à droite.
Conclusion
En conclusion je pourrais dire que ce concours m'a procuré beaucoup de plaisir, et que je pense ressayer au prochain concours s'il y en a un ? J'espère que tous les autres concurrents ont pris autant de plaisir que moi. Pour finir voici deux screens, le premier provient de la version 1.0 et le second de la dernière version en date, la 1.3.
Secret (cliquez pour afficher)Archive : Description lors du concours
Bonjour,
Premier concours pour la v3 et premier essai. Ici je vous montrerai toutes les évolutions du projet. L'inscription est tardive mais j'ai préféré attendre d'avoir fait au moins l'obligatoire avant de m'inscrire. Trêve de bla-bla, un historique, pour le moment bien vide, des différentes versions effectuées. J'essayerai de le mettre à jour assez souvent.
Mardi 15 Juillet 2008 à 23 h 45: Sortie de la version 1.0
Dernier jour pour s'inscrire, et même dernières minutes et la version 1.0 sort. Cette version regroupe toute les fonctionnalités obligatoires. Le programme est fait en C++, et utilise Qt 4.4 . Les versions précédentes de Qt pourront peut-être supporter le logiciel, mais je ne peux les tester. On ne peut saisir qu'un seul chiffre compris entre 1 et 9. J'ai fait tout ceci avec des boutons simples ce qui rend la grille peu lisible je trouve, je vais donc faire en sorte de changer ceci. Et enfin un vérificateur de grille.
Voici quelques screenshots du programme:
Maintenant j'ai deux objectifs que j'aimerais atteindre au minimum, et qui sont la lecture des sudokus dans les fichiers et un interface graphique bien plus belle.
Mardi 22 juillet 2008 à 00 h 09
Aujourd'hui premier jour d'upload. Désormais Zudoku charge des grilles aléatoirement à partir d'un fichier. J'upload le premier *.zip . J'ai encore beaucoup de boulot. Une bonne documentation, et une interface graphique plus réussi serait les bienvenus au minimum. Les quelques jours qu'il me reste ne seront donc pas de trop et risquent d'être plutôt chargés.
En tout cas merci de m'avoir lu.
Mercredi 30 juillet 2008 à 00 h 46
Voici le dernier screen en date, pris il y a 2 minutes. C'est la version que je vais rendre. Plusieurs nouvelles fonctionnalitées ont été ajoutées. Désormais on peut réinitialiser la grille au départ. Charger une grille aleatoirement suivant le niveau de difficulté. Charger une grille avec son numero (pour pouvoir reaire une grille une fois finie quelques semaines plus tard. Et surtout, résoudre les grilles. Malheureusement mon algorithme ne résoud que les grilles de niveau facile. Mais bon je suis quand même content de ce que j'ai fait.
Maintenant que le concours approche de sa fin, je vais m'atteler à faire une belle description, à commenter mon code correctement et enfin à uploader tout ça.
Si vous voyez des fautes d'orthographe ici ou dans le programme (les accents dans le programme ne passent pas). Il serait sympa de me prévenir, merci beaucoup d'avance.
PS: La faute dans le screen à été corrigées.