[..] Programme de résolution de sudoku qui ne marche pas ...

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

[..] Programme de résolution de sudoku qui ne marche pas ...

#1

Message par guitarist »

Bonjour à tous,

En ce moment je travaille sur un programme qui devrait etre capable de reussir un sudoku tout seul.

Voici mon code en entier :
► Afficher le texte
Modifié en dernier par guitarist le jeu. 29 sept. 2011 17:11, modifié 5 fois.
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..]Programme de réalisation de sudoku qui ne marche pas

#2

Message par guitarist »

Up :(


Changement du probleme :
Dans estValide() la boucle ne donne que les 2 premieres valeurs aux cases et pas les autres :/
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..]Programme de réalisation de sudoku qui ne marche pas

#3

Message par ZDS »

Bonjour.

Personnellement, j'ai du mal à passer mon samedi/dimanche à "bosser" donc je te donnerai un coup de main plus facilement après le weekend ^^

Néanmoins une chose visible à l’œil nu, ton code n'est pas facilement évolutif, très complexe du style avoir 2x81=162 lignes de code pour les 81 cases du sudoku, c'est inutile. Une boucle très simple aurait suffit, et est beaucoup plus facile à comprendre (Vade retro, code auto-généré avec Koda ! KSSSSSS !!!).

Et là où tu parles d'avoir simplifié la génération du tableau, pourquoi ne pas utiliser un tableau directement, puis un:

Code : Tout sélectionner

For $i = 0 To Ubound($tab)-1
...
Next
Bref, je serai disposé à t'apporter mon aide demain.

A bientôt!

PS: Pour de la réalisation de choses aussi complexe (en terme de prédicat, de choix possibles, de contraintes, etc...) AutoIt n'est pas un langage prévu pour. C'est possible bien sûr, mais les temps de calculs et les tonnes de code coté algo risquent d'être monstrueux; Choisir un langage prévu pour l'intelligence artificielle comme LISP ou Prolog aurait été plus intelligent à mon avis, et l'interfacer avec une interface graphique en AutoIt aurait été plus simple.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#4

Message par guitarist »

En fait mon but est d'avoir un langage assez clair car c'est pour mon projet de tpe que je fait ça.
Notre sujet tourne autour de l'IA et je voulais montrer un exemple de résolution "intelligente" d'un probleme.
Et entre nous à part l'autoit et le c++ (et encore je débute) je ne maitrise pas grand chose.

Pour mon tableau de variable, je n'ai pas bien compris. Depuis Koda on peut generer ce tableau?

Et sinon merci de me répondre (enfin) :=)
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#5

Message par ZDS »

Comme je t'ai dit, pas trop le temps ce soir. Mais voila déjà un premier jet coté organisation du code (rien de touché concernant ton souci pour l'instant) en utilisant une double boucle pour générer les boutons et pour générer ta variable $Grille :
► Afficher le texteMise en forme des boutons comme une matrice 9x9
PS: Pour une résolution intelligente de problème, on ne se tourne pas vers un langage comme AutoIt, mais comme je te disais vers des langages comme LISP et Prolog (par contre ça demande plus de doigté). Ça n’empêche que vu comme ça, aucun souci pour le faire. Je serai même content du challenge ^^
PS2: Je ne dénigre pas AutoIt, juste pour dire qu'il faut s'attendre à une résolution de type mécanique (même si typiquement tout programme est mécanique quelque soit le langage ^^). C'est plus simple de résoudre une énigme quand on réfléchit avec des bases de connaissances, des prédicats, et des axiomes. Plutôt qu'avec des lignes de code séquentielles et pas forcément optimisées.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#6

Message par guitarist »

Ok merci pour ce bout de code c'est vraiment super et généreux de ta part :D

Sinon comme je l'ai dit c'est pour un tpe alors j'essaye que ça soit pas trop complexe si jamais je tombe avec un prof d'allemand et de français que je puisse leur expliquer facilement :p
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#7

Message par ZDS »

Bonjour,

Pour ton script j'y suis allé par étapes, tu me diras si ça te "plait" ^^

1) J'ai ajouté dans le coin bas droite une liste de boutons (de 1 à 9), qui se met à jour en fonction du focus d'une case :
Quand on donne le focus à une case, le script regarde les différentes valeurs possibles pour cette case, et regardant les valeurs qui sont déjà prises dans la ligne, dans la colonne, et dans le bloc. Les boutons correspondant à une valeur déjà prise sont grisés. Cette affichage est mis à jour à chaque fois que le focus change.

2) J'ai modifié ta façon de vérifier que la grille est correcte : estValide($grille) retourne une matrice dont les valeurs sont une combinaison de _ , L , C et B. L correspond à une erreur sur la ligne, C une erreur sur la colonne, et B sur le bloc. En gros, pour la case en [i,j], on regarde la matrice retournée par estValide en [i,j], si c'est écrit "_ _ _", c'est qu'il n'y a pas d'erreur.
Cette vérification se fait par étapes successives : Pour chaque case, on vérifie d'abord si sa ligne est correcte, puis sa colonne, puis son bloc.
NB: Il y a moyen d'améliorer le rendement de la vérification. Par exemple, la vérification des lignes avec Func estValideSurLigne($grille, $x,$y) : On boucle de 0 à 8; en fait, c'est inutile car la vérification se fera plus tard sur tout le reste de la ligne, cela suffit de boucler de 0 à $x-1 (même $x est inutile à tester). Le code

Code : Tout sélectionner

Func estValideSurLigne($grille, $x,$y)
    Local $valeur = $grille[$x][$y]
    For $i = 0 To 8
        If $i<>$x And $grille[$i][$y]=$valeur Then
            Return False
        EndIf
    Next
    Return True
EndFunc
peut donc être modifié en

Code : Tout sélectionner

Func estValideSurLigne($grille, $x,$y)
    Local $valeur = $grille[$x][$y]
    For $i = 0 To $x-1
        If $grille[$i][$y]=$valeur Then
            Return False
        EndIf
    Next
    Return True
EndFunc
3) J'ai aussi ajouté une fonction d'import. C'est uniquement pour remplir automatiquement la grille avec des valeurs que j'ai mis de coté. Comme "050310020010698540800020000007040080045000910090050700000060007076235090030089050" qui permet de remplir une grille automatiquement avec les valeurs fournies. Exemple avec la valeur précédente, les zéros correspondant à des cases vides:

Code : Tout sélectionner

0 5 0   3 1 0   0 2 0
0 1 0   6 9 8   5 4 0
8 0 0   0 2 0   0 0 0

0 0 7   0 4 0   0 8 0
0 4 5   0 0 0   9 1 0
0 9 0   0 5 0   7 0 0

0 0 0   0 6 0   0 0 7
0 7 6   2 3 5   0 9 0
0 3 0   0 8 9   0 5 0
4) En cliquant sur Lancer, le script vérifie la validité de la grille et affiche les valeurs à problème en rouge

Voila, il suffit de faire une fonction de remplissage de la grille (par une algo type IA), en cliquant sur le bouton Remplir ou Lancer (pour l'instant j'ai séparé les deux fonctions pour mes tests).

Le code est à mon avis assez clair à comprendre, mais si tu veux plus d'infos, n'hésite pas à demander

A bientôt !
► Afficher le texteScript avec vérification et affichages des valeurs possibles
Edit: Version améliorée toute simple, en cliquant sur Remplir, il remplit les cases qui n'ont qu'un seul choix possible, et il continue à remplir tant qu'il y arrive :
► Afficher le texteScript avec remplissage des choix uniques
J'en ai aussi profité pour commenter le code, afin que tu le comprennes le mieux possible.
Modifié en dernier par ZDS le lun. 19 sept. 2011 14:34, modifié 2 fois.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#8

Message par ZDS »

Euh Ker-zut comme on dit chez moi (bah ouais, je suis breton ^^).

Je pensais que ton topic était dans la section "Demande de scripts", et non "Aide générale"... Ne regarde pas les spoilers si tu veux y arriver par toi même. Et si tu ne veux pas la solution tout de suite, dis le moi et je les effacerai.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#9

Message par guitarist »

Effectivement je n'en attendais pas tant !

Cependant je garde les spoilers pour essayer d'améliorer mon langages (tant qu'a faire :) )

Je te remercie énormément d'avoir passé du temps sur mon cas :D

Cependant j'ai trouvé un défaut !
Sisi !

En fait j'ai lancé une grille de difficultée "diabolique" juste pour voir et la le probleme vient du fait que ton programme ne prend pas de risque et s'arrete s'il y a plus d'une possibilité possible :/
Et nouveau bug detecté (désolé je suis critique) j'ai rentré une grille correctement et il m'en fait une erroné. La je pense que ça manque cruellement de back traking :)

Donc je vais essayer de tripoter pour passer en force-brut si ça arrive mais je veux bien un peu d'aide :)

D'ailleurs pour terminer je pense avoir compris une bonne partie de ton script sauf la notion de "focus". Je voit pas trop de quoi tu parle.
bob
Niveau 3
Niveau 3
Messages : 41
Enregistré le : ven. 16 oct. 2009 23:23
Status : Hors ligne

Re: [..]Programme de réalisation de sudoku qui ne marche pas

#10

Message par bob »

ZDS a écrit : PS: Pour de la réalisation de choses aussi complexe (en terme de prédicat, de choix possibles, de contraintes, etc...) AutoIt n'est pas un langage prévu pour. C'est possible bien sûr, mais les temps de calculs et les tonnes de code coté algo risquent d'être monstrueux; Choisir un langage prévu pour l'intelligence artificielle comme LISP ou Prolog aurait été plus intelligent à mon avis, et l'interfacer avec une interface graphique en AutoIt aurait été plus simple.
Utilisez-vous vous-même de tels langages (LISP ou Prolog ) ? Pouvez-vous nous en dire plus ?
D'avance, merci.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#11

Message par ZDS »

Bonsoir,

Concernant la mécanique de résolution et les différentes heuristiques à vérifier, je ne t'ai pas mâché le travail, et c'était voulu, à toi de l'améliorer si tu le souhaites. Mais la version que j'ai sous le coude permet de résoudre une grille où il ne reste que des choix multiples (faut pas me prendre pour une quiche, je suis un dieu de l'algorithmique, le seul qui me batte c'est Chuck Norris ^^). Si tu veux voir l'autre version plus poussée, dis moi et je la posterai.

Pour les grilles qui font planter mon algo, je me permets de mettre ta parole en doute, je pense que ta grille était erronée dès le départ. Dans le cas contraire, donne moi la grille en question que je puisse reproduire le bug. Un challenge est toujours le bienvenu :)

Pour finir, je suis plutôt bien bercé dans le Prolog (je n'ai pas retouché au LISP depuis plus de trois ans par contre, je suis un peu rouillé). Je posterai sans doute une discussion à ce propos dans la section Chat demain.

Bonne nuit, à bientôt!

EDIT: C'est aussi sur e-Sudoku.fr que j'ai choppé mes grilles de tests, et elles sont toutes passées sans erreurs (certaines ne se remplissaient pas entièrement avec le script que je t'ai fourni, mais elles étaient correctes).

Je ne vois pas de quoi tu parles avec "emplacement de l'appel de la fonction". De quelle fonction tu parles?

Sinon, pour l'amélioration que je ne t'ai pas donnée, elle s'insère aussi dans la boucle Do/Until. C'est une heuristique qui pour chaque case, récupère la liste des valeurs possibles, et, pour chaque valeur possible X de cette case, vérifie si cette valeur est possible pour une autre case de la même ligne de la même colonne ou du même bloc : Si cette valeur X n'est pas possible ailleurs, c'est que la case choisie au départ vaut forcément X. Voila, en espérant que ça t'aiguille ^^
Modifié en dernier par ZDS le mar. 20 sept. 2011 09:52, modifié 1 fois.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#12

Message par guitarist »

Tape sudoku sur google j'ai pris le premier site qui venait. C'est la ou les deux grilles ont montrées des reticenses :p
Sinon jeme suis peut etre trompé c'est vrai.

Pour la fin du travail j'aimerais juste un conseil sur l'emplacement d el'appel de la fonction. Je voulais le faire apres la boucle do ... While mais ça me parait moyen niveau logique. Apres j'ai tout betement repris la fonction que j'avais faites en changeant quelqus para, biensur sans marcher mais faut que je prenne le temps de bosser dessus aussi :p


Sinon merci beaucoup pour ton aide, si j'ai encore besoin j'uprais le sujet :)
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#13

Message par guitarist »

Humm en gros pour la deuxieme etape tu verrais un second triage c'est ça?

Moi je voulait faire bourrin avec mon force brut :)

Apres j'ai test quelques truc mais je doit rater qqlch dans mes script, tu veux bien jeter un coup d'oeil sur mon premier post et me dire ou je me trompe ? :oops:
Je sais que la fonction estValideSurBloc est fausse deja mais c'est estValide qui me préoccupe :/
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#14

Message par ZDS »

Bonsoir tardif pré-dodo.
  • guitarist a écrit :

    Code : Tout sélectionner

    if $position == 9*9 Then

    Code : Tout sélectionner

    if $position = 9*9 Then
    On est pas en Java ici ! ^^
  • guitarist a écrit :

    Code : Tout sélectionner

    $i = $position/9

    Code : Tout sélectionner

    $i = Floor($position/9)
    Sinon tu risques d'avoir des valeurs à virgules (et un gros plantage quelques lignes plus loin quand tu utilises $i comme index d'une matrice), i n'est pas typé entier, c'est juste un nombre.Pour être encore plus sûr dans ton algo, je te conseille même de faire : $j = Mod($position,9) PUIS $i = ($position-$j)/9 => Aucun plantage possible : Si deux nombres ont le même reste dans une division euclidienne par N, leur différence est divisible par N. (Comme quoi, ça sert toujours, les maths ^^)
  • guitarist a écrit :

    Code : Tout sélectionner

    if $grille[$i][$j] <> "" Then
            return estValide($grille, $position+1)
        EndIf
    Pourquoi tu veux absolument faire de la récursivité par appel? C'est sans doute classe, mais si tu veux faire qqchose de fonctionnel et facilement débuggable par toi ou un autre, utilise des boucles comme tout le monde; tu verras ENSUITE pour ajouter des fioritures.
  • guitarist a écrit :

    Code : Tout sélectionner

    for $k=1 to $k <= 9

    Code : Tout sélectionner

    for $k=1 to 9
    Bah oui, comment veux tu que ça fonctionne si tu t'obstines à faire du C++ ou du Java... Apprends la syntaxe AutoIt avant ^^
  • guitarist a écrit :

    Code : Tout sélectionner

    if absentSurLigne($k,$grille,$i) == True And absentSurColonne($k,$grille,$j)== True And absentSurBloc($k,$grille,$i,$j) == True Then

    Code : Tout sélectionner

    if absentSurLigne($k,$grille,$i) And absentSurColonne($k,$grille,$j) And absentSurBloc($k,$grille,$i,$j) Then
    "If X = True Then" c'est pareil que "If X Then", et ça évite de mettre des doubles "=" qui n'ont pas leur place.
  • guitarist a écrit :

    Code : Tout sélectionner

    $grille[$i][$j] = "";
    Qu'est ce qu'il fout là, le point-virgule à la fin!? Hein? C'est pas bien, tu vas te faire taper sur les doigts :D
En bref, je pense que tu devrais tout d'abord lâcher tes habitudes de codeur C/C++/C#/Java/JavaScript/ObiwanKenobi/LaRéponseD. Ensuite, vu la façon de coder de départ, j'ai du mal à me plonger dans ton code, l'heure et la fatigue n'aident pas bien sûr, mais simplifie ton code, sans quoi tu risques de ne pas avoir d'aide (pas de récursivité, simplifie tes boucles, utilise des noms de variables explicites, et surtout commente un peu ton code).

On se revoit demain :)
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#15

Message par guitarist »

Ah merci :) effectivement j'ai du mal a sortir du c++ :p pourtant je connait depuis plus lontemps autoit, etrange non?

Pour l'appel recursif je lance une boucle while?
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#16

Message par ZDS »

Bonjour,

Oui, si tu veux. Mais pourquoi ne pas lancer une boucle for? Ta valeur passe de 0 à 80, autant faire un "For $position = 0 To 9*9-1 ... Next" Sinon, j'ai regardé plus précisement l'algo de ta méthode estValide, et même si la syntaxe laisse à désirer, ta façon de faire ne me semble pas du tout fonctionnelle.

if $position == 9*9 Then return true
Au moins ta condition d'arret est bonne

$i = $position/9 $j = Mod ($position,9)
A remplacer par le code fourni avant, mais sinon ça me va

if $grille[$i][$j] <> "" Then return estValide($grille, $position+1)
Si tu as un chiffre rempli dans la grille, tu ne fais rien, et tu passes au suivant? C'est faux à mon avis, c'est quand la valeur est vide que tu ne peux pas faire grand chose (à part vérifier qu'il reste au moins un choix possible).
A remplacer par : if $grille[$i][$j] = "" Then return estValide($grille, $position+1)

for $k=1 to $k <= 9 if absentSurLigne($k,$grille,$i) == True And absentSurColonne($k,$grille,$j)== True And absentSurBloc($k,$grille,$i,$j) == True Then
Pour la tentative de compréhension, arrivé à ce point ci, c'est que la valeur en [$i,$j] est nulle. Donc :
Pour chaque valeur $k entre 1 et 9, on vérifie que la $k est absente de la ligne ET de la colonne ET du bloc, dans ce cas la grille est pour le moment valide.
Je ne vois pas en quoi c'est utile à la détection d'une grille valide, bien au contraire.
Ce qu'il faut, c'est "arrivé à ce point ci, c'est que la valeur en [$i,$j] est NON NULLE. Donc :
Pour la valeur $k présente en [$i,$j], on vérifie que la $k est absente de la ligne ET de la colonne ET du bloc, dans le cas contraire, la grille est incorrecte.

Bref, je pense que la totalité de ton code est à changer (en tout cas pour la partie algo (désolé d'être aussi direct :s). Ecris le d'abord en langage naturel, et on en rediscute, sinon, regarde le code que j'ai fait, ça devrait t'aider :

Code : Tout sélectionner

Func estValide($grille)
    For $n = 0 To 9*9-1
        Local $i = Floor($n/9)
        Local $j = Mod($n,9)
        Local $k = $grille[$i][$j]
        If $grille[$i][$j] <> "" Then
            Local $valide = 
            If Not (absentSurLigne($k,$grille,$i) And absentSurColonne($k,$grille,$j) And absentSurBloc($k,$grille,$i,$j)) Then return False
        EndIf
    Next
    return True
EndFunc
C'est largement plus simple, non?

Autre chose dans absentSurBloc ($k, $grille, $o, $j) :
$_i = 3*($o/3) ?? En autoIt, ça fait comme $_i = $o. Je pense que ce que tu voulais faire, c'est $_i = 3*Floor($o/3)

C'est tout pour le moment, j'ai une réunion. A plus tard !

EDIT: Je pense que le plus simple (ne serait-ce pour comprendre ton code), c'est de faire deux fonctions : une pour vérifier que la grille est correcte (estValide($grille)), et une autre pour remplir la grille (remplir(ByRef $grille), le ByRef permet un passage de paramètre par référence, et pas par valeur. Comme ça tu peux modifier la grille à la volée).
Modifié en dernier par ZDS le mer. 21 sept. 2011 14:03, modifié 1 fois.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#17

Message par guitarist »

Ok merci deja pour ton avis (et pas de soucis, j'aime quand les gens sont directs :) )
En fait ma fonction a pour but de remplir la grille alors pourquoi juste verifier que c'est bon ce qu'on a deja?
Moi je voulait une méthode supplémentaire pour remplir.

En fait estValide a un nom ambigu c'est pour ça que tu confonds je pense :)

Je revois tout ça de suite et je posterais mon code actuel.
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#18

Message par guitarist »

Bon voilà ou j'en suis actuellement :

J'ai reussi +- l'amélioration dont tu m'a parlé donc voici mon code actuellement (j'ai essayé de commenter et de faire clair)
Modifié en dernier par guitarist le mar. 27 sept. 2011 17:10, modifié 1 fois.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#19

Message par ZDS »

SciTE a écrit :C:\Documents and Settings\ZDS\Desktop\Test.au3(158,44) : ERROR: backtraking(): undefined function.
backtraking(getGrille($matrice),0,0)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\ZDS\Desktop\Test.au3(370,40) : ERROR: absentSurLigne(): undefined function.
if absentSurLigne($k,$grille,$i)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\ZDS\Desktop\Test.au3(370,76) : ERROR: absentSurColonne(): undefined function.
if absentSurLigne($k,$grille,$i) And absentSurColonne($k,$grille,$j)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\ZDS\Desktop\Test.au3(370,112) : ERROR: absentSurBloc(): undefined function.
if absentSurLigne($k,$grille,$i) And absentSurColonne($k,$grille,$j) And absentSurBloc($k,$grille,$i,$j)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\ZDS\Desktop\Test.au3 - 4 error(s), 0 warning(s)
J'aimerai bien avoir un code correct en terme de syntaxe, avec des fonctions qui existent, et qui ont la même signature, avant de pouvoir continuer ^^ Parce que backtraking(getGrille($matrice),0,0) a trois paramètres, mais ta fonction backT ($grille, $position) en a que deux... Bref, s'il te plait, corrige ça en premier.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
guitarist
Niveau 6
Niveau 6
Messages : 235
Enregistré le : mar. 02 déc. 2008 16:59
Status : Hors ligne

Re: [..] Programme de résolution de sudoku qui ne marche pas

#20

Message par guitarist »

Mes escuses, voici le bon code.

Effectivement y a en doublon 3 fonction mais avec des param différents alors chu un peu embêté
Modifié en dernier par guitarist le mar. 27 sept. 2011 17:10, modifié 1 fois.
Répondre