SUDOKU SOLVER

cs_Mafassure Messages postés 1058 Date d'inscription jeudi 24 juillet 2003 Statut Modérateur Dernière intervention 14 février 2009 - 29 mai 2006 à 22:07
AFPA2003 Messages postés 35 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 22 mai 2013 - 22 mai 2013 à 00:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37825-sudoku-solver

AFPA2003 Messages postés 35 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 22 mai 2013
22 mai 2013 à 00:10
Et s'il y a plusieurs solutions :
- la grille est validée quand même
- il n'accepte pas d'autres solutions
exemple :
000057200804000030002030058700006001060079340001000005307400080000300000000705023
ma solution :
139857264854621937672934158723546891568179342491283675317462589245398716984715423

En fait je suis venu ici en cherchant un solveur pour des sudoku multi grilles : kamikaze, banzai, marathon, triathlon, etc.
voir sur http://kelpi.zabro.free.fr/Web/Sudoku/sdk5.htm

Est-il possible d'adapter ce code pour ces autres grilles de sudoku ?

J'ai quelques notions de vb et aucune en flash
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
6 juin 2006 à 14:17
...j'ai pas pu m'empêcher, donc en fait mea culpa! Ma lecture n'était pas diagonale, mais elle n'est pas allée plus loin que la méthode à effet de bord!

Bref c'est nickel !

@+
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
6 juin 2006 à 13:41
j'ai lu le code en diagonale et j'ai cru que tu cherchais les cases où il n'y avait qu'une possibilité pour y mettre qqch...

Vais la relire tranquillement ce soir!

@+!
kingcobra Messages postés 316 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 19 septembre 2012
6 juin 2006 à 13:35
salut !

t'as lu le code ?

tout ce que tu décris est déjà fait et en mieux.
Le code résoud absolument toutes les grilles. (meme les vides)
Dans le cas ou une est impossible, c a d que les chiffres sont placés de manière à ne pas pouvoir finir la grille, alors il ne finira pas de la résoudre puisqu'il peut pas.
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
6 juin 2006 à 10:28
S'il y a un cas où le code ne peut pas choisir il faudrait partir dans une autre boucle. Moi je verrais bien un array qui stockerait les possibilités d'une case (laquelle? p-ê une de celles où il y a le plus de possibilités).

ensuite on fait une copie de la grille à l'état où ça bloque
on prend une des possibilités de la retenue
on réactualise les possibilités dans les autres cases
et on refait un "isFinished"

...on boucle sur le nombre de possibilités que contient la case choisie

On pourrait aussi boucler sur le nombre de cases nom remplies encore (dans le cas où avec la case choisie on résoud pas la grille)

Ensuite, si ça suffit pas, ben c'est que la grille est vraiment compliquée! Le plus simple c'est d'abandonner! Sinon il faudrait imbriquer une seconde boucle de secours dans la première...mais j'ose même pas imaginer le foutoir! lol

Maintenant les grilles sont p-ê conçues pour être résolues sans qu'on ait besoin de faire un choix aléatoire dans une case?

@+! Samy
kingcobra Messages postés 316 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 19 septembre 2012
6 juin 2006 à 09:54
finalement c'est tout simple, il suffit de tester un isFinished() apres un solve().
Si true c'est terminé sinon c'est impossible.
kingcobra Messages postés 316 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 19 septembre 2012
5 juin 2006 à 13:33
je corrige ça au plus vite, ainsi solve renverra null si la grille n'est pas solvable.
kingcobra Messages postés 316 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 19 septembre 2012
5 juin 2006 à 13:28
En fait t'a pas tout a fait tort.
y'a un seul truc que je ne gère pas, je devrai le faire assez vite, c'était un oubli de ma part.
Si la grille de départ est fausse une fonction est faite pour ça.
(1)Si la grille de départ est correcte mais qu'elle n'est pas solvable alors ça ne fait rien (a cause de la récursivité).
Reste a faire une condition qui renvoie une erreur si il n'y pas eu de changement de grille dans la recursivite (une ligne).

Ensuite si il ne peut pas réduire, il test des solutions parmi celles possibles, si la grille est solvable alors on finira forcement sinon (1).

j'espere avoir éclaircit le pb ... A + et merci.
cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
5 juin 2006 à 01:07
J'ai fait un logiciel de jeu pour un site et j'ai toujours gardé dans l'idée de faire un solveur...jamais eu le temps de m'y mettre ni l'utilité!

Mais vu le boulot que t'as fait, ben je m'y mettrais jamais! Classe super-bien commentée et complète en plus!

J'ai pas tout vérifié et mon seul doute c'est lorsque tu peux pas réduire...il réduit quand même, mais est-ce forcément la bonne solution? Si ça ne l'est pas, la solution ne sera jamais trouvée? J'ai pas vu de second algorithme de secours...peut-être pas assez bien regardé...

9/10 Super boulot!

@+! Samy
cs_johann1 Messages postés 170 Date d'inscription jeudi 21 octobre 2004 Statut Membre Dernière intervention 9 janvier 2008
30 mai 2006 à 17:33
Evidemment! C'est vraiment le TOP !

Bravo !
Buddies Messages postés 3 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 7 juin 2008
30 mai 2006 à 16:26
salut,
exellent ! vraiment bien joué ! bien commenté... ça marche...vivement la suite !
a+
cs_Mafassure Messages postés 1058 Date d'inscription jeudi 24 juillet 2003 Statut Modérateur Dernière intervention 14 février 2009
29 mai 2006 à 22:07
salut,

je suis pas fan de suduku (on a du me rappeler le principe pour que j'arrive a utiliser le swf)
désolé :b pas grave et hop dans la sourceOthèque :O)

a+
Rejoignez-nous