IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

[Défi] Le Défi Delphi n°5 : Le Sudoku solver


Sujet :

Delphi

  1. #61
    Membre expérimenté
    Avatar de Pascal Fonteneau
    Profil pro
    gérant
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : gérant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Par défaut Pas possible
    Hello

    Comment fais tu pour savoir si ton problème n'a pas plusieurs solutions?
    Un solver logique a du mal...
    Avec cette méthode, je ne pense pas qu'il puisse y avoir plusieurs solutions.
    Puisque seule la logique est utilisée pour la résolution, lorsque j'obtiend une grille juste, je n'ai posé que des chiffres ne pouvant être QUE être le bon et sans ambiguité. Sinon ma grille n'est pas finie et je dois ajouter un révélé.


    Si avec plus de méthodes logiques codées, il avait été trouvé une solution plus tôt (avec moins de révélé), nous aurions eu simple un autre sudoku , lui aussi avec une seule solution possible mais avec un niveau un peu plus diabolique, c'est tout.

    Dans ma proposition de solution pour ce défi, je n'utilise que 2 méthodes pour générer des grilles (les 2 plus simples) . Personnellement, je trouve cela suffisant pour faire des grilles amusantes.

    J'espere avoir été clair

    a+
    Pascal

  2. #62
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Pascal Fonteneau > Tu dis que les grilles a 17 releves sont les plus dures par la logique ... Franchement, il y a des grilles diaboliques plus dures que celles a 17 relevés ... AI Escargot, par exemple, est beaucoup plus dure.

    Sinon, pas mal pour la création de grilles !

    Edit : Oula !
    Je cherchais a voir comment résoudre AI Escargot par la logique, mais ... personne n'a trouvé, a part en faisant des hypotheses !! Je suis dégouté !
    Si quelqu'un a un lien de résolution, qu'il me le dise !

  3. #63
    Membre expérimenté
    Avatar de Pascal Fonteneau
    Profil pro
    gérant
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : gérant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Par défaut Les 17 réléves
    Hello

    réponse à MICK605 .

    J'ai pas dit exactement cela, J'ai dit : "elles sont dures", je n'ai pas dit "les plus dures". Mais bon rien de grave là dedans.

    Je pensai ajouter les X wings à ma solution, mais il manquerai encore trop de méthodes.

    X WINGS (6 recherches possibles)
    XY-wing (3 recherches possibles)
    XYZ-Wing
    Unicité
    Swordfish (7 recherches possible)
    Jellyfish avec 2 à 4 candidats, dans 4 lignes ou colonnes.
    Squirmbag avec 2 à 5 candidats, dans 5 lignes ou colonnes.
    Burma
    Turbot Fish

    il en existe encore beaucoup d'autres

    Alors , j'arrete à une dizaine de méthode par manque de temps

  4. #64
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Par défaut
    Citation Envoyé par Pascal Fonteneau Voir le message
    Hello

    J'espere avoir été clair
    Oui Mais tu fais erreur : ce n'est opas parceque tu as redolu une grille par la
    logique qu'il n'y qu'une solution
    Tu as peut etre trouver une des solutions les plus rapides mais tu ne peiux pas etre sur que ce sout la seule

    Envoies quelques grilles je verifirai: tu as peut etre raison!
    Mais en general les solveurs logiques opnt une oiption pour verifier

    Comme on est là pour partager je vous propose la routine suivante:
    On passe sn temps a chercher dans quelle collonne ou region sse trouve une case. Alors j'ai fabriqué une poetite structure dans laquelle je met le numero de la case, sa colonne, sa rangée,;sa egio,n et si s'est un revele
    La routine n'a rien de magique mais qu'est quelle me sert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     TCase = record
      Num: Cardinal;
      Rang: Cardinal;
      Colo: Cardinal;
      Regi: Cardinal;
      Reve: cardinal;
     end;
      Cases: array[1..81] of Tcase;
    procedure Init_BFSolveur(S: string);
    // init contenu des cases à l'ecran
    //  Numero range colonne,region, revele
     
    var i: cardinal;
    begin
    //  for i := 1 to 9 do
    //   Str1[i] := '000000000';
     for i := 1 to 81 do
      with Cases[i] do
       begin
        num := I;
        colo := colo mod I;
        Rang := (i div 9) + 1;
        if (rang < 4) then
         begin
          if (colo < 4) then
           Regi := 1
          else
           if (colo < 7) then
            Regi := 2
           else
            Regi := 3;
         end
        else
         if Rang < 7 then
          begin
           if (colo < 4) then
            Regi := 3
           else
            if (colo < 7) then
             Regi := 4
            else
             Regi := 5;
          end
         else
          begin
           if (colo < 4) then
            Regi := 7
           else
            if (colo < 7) then
             Regi := 8
            else
             Regi := 9;
          end
     
     
    // S est le string contenant le probleme
        if S[i] <> 0' then
         begin
          Reve := 1;
          end
        else
         begin
          Reve := 0;
         end;
     
       end;
    En esperant que cela pourra aider certains

    Mick : tu as mis un 1 en case 66?
    Je regarde la logique voir si je peux t'aider Mais tui penses bien
    que le sudokui le plus dur du monde se defends.
    Mais on l'aura!

    Boris

  5. #65
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Par défaut Logique
    Mick
    J'ai essaye quelques pointures en solveur logique et elles ont fait chou blanc: pas de solution.

    Pascal meme avec x,yz ou sword
    Si cela t'intersse j'ai code les x,y et z wing ainsi que les quintets
    Le code est disponible (mais ne resoiudra pas escargot)

    Je pense avoir trouve une méthode pour 'me faire' l'escargot en logique
    maintenant que je l'ai exécute en Brute..
    Boris

  6. #66
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Hey !

    J'ai pas dit exactement cela, J'ai dit : "elles sont dures", je n'ai pas dit "les plus dures". Mais bon rien de grave là dedans.
    Ok, j'avais mal compris !

    X WINGS (6 recherches possibles)
    XY-wing (3 recherches possibles)
    XYZ-Wing
    Unicité
    Swordfish (7 recherches possible)
    Jellyfish avec 2 à 4 candidats, dans 4 lignes ou colonnes.
    Squirmbag avec 2 à 5 candidats, dans 5 lignes ou colonnes.
    Burma
    Turbot Fish
    De quoi tu parles quand tu dis 6 recherches possibles ??


    FullSpeed > Tu as un programme qui vérifie l'unicité ? ca pourrait etre pas mal. J'ai une grille qui a l'air d'avoir plusieurs solutions ... (enfin j'ai pas trop cherché)

    Mick : tu as mis un 1 en case 66?
    Bien sur ! ca a marché des la deuxieme méthode codée !!

    Je regarde la logique voir si je peux t'aider. Mais tu penses bien
    que le sudoku le plus dur du monde se defends.
    Mais on l'aura !
    Ouais, c'est sur !!

    Sinon, tu as aussi créé un type TCase ?? moi aussi !! Par contre, j'ai juste mis la ligne, la colonne, et la valeur. J'ai une fonction qui renvoie le numero de la region en fonction de la ligne et de la colonne. Je trouve ca plus simple. Je ne differencie pas non plus les reveles de ce qui n'en est pas !

    Oui, mais tu fais erreur : ce n'est pas parce que tu as resolu une grille par la logique qu'il n'y a qu'une solution.
    Tu as peut-être trouvé une des solutions les plus rapides mais tu ne peux pas être sûr que ce soit la seule
    Je suis d'accord. Ce n'est pas parce que tu enleves qu'un seul chiffre que ta grille sera unique : Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    295 871 346
    417 963 582
    386 245 917
     
    748 396 125
    631 527 498
    952 184 763
     
    569 432 .71      ( * )
    174 65. .39
    823 719 654
    N'a qu'une seule solution, alors qu'en enlevant le 2 de la ligne (*), on obtient deux solutions !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    295 871 346
    417 963 582
    386 245 917
     
    748 396 125
    631 527 498
    952 184 763
     
    569 43. .71      ( * )
    174 65. .39
    823 719 654
    Je pense avoir trouve une méthode pour 'me faire' l'escargot en logique
    maintenant que je l'ai exécute en Brute..
    Si tu parles des hypotheses, j'ai bien peur qu'on soit obligé de passer par la ! Je n'aime pas cette méthode.

  7. #67
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    essayer l'escargot elle possède plusieurs solution

    voici quelle que methode pouvant vous permettre de trouver les candidat
    je suis parti d'une matrice de 9x9 et pas d'une ligne de 1 à 81

    Pour retrouver le Group
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function GetGroup(ACol, ARow : Integer): Integer;
    begin
      Result := (((ARow-1)Div 3)*3) + ((Acol-1)Div 3)
    end;
    pour definir les nombres possible restant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    Function CheckPosibilite(ALeft, ATop, ARight, ABottom: Integer) : tArrPossibilite;
    var
      y,x : integer;
      candidates :  tArrPossibilite;
      i : integer;
    begin
      for i:= low(candidates) to high(candidates) do
         candidates[i] := i;
     
      for  y := ATop to ABottom do
      begin
        for x := ALeft to ARight do
        begin
          if Board[x,y] > 0 then // si une on trouve un élément on enlève la valeur
           candidates[Board[x,y]] := 0;
        end;
      end;
      Result := candidates;
    end;
     
    Function DonnePossibilite(aRow,aCol : Integer) : tPossibilite;
    var
        k,l  : Integer;
       tmpPoss    : tArrPossibilite; // array of 
       candidates :  tPossibilite;   // set of
       ii : Integer;
    begin
       Result :=[];
       FillChar(tmpPoss,sizeof(tmpPoss),0);
       candidates := [ValMin..ValMax];
       if Board[aRow,aCol] = 0 Then // si pas de valeur trouvé
       begin
          tmpPoss := CheckPosibilite(aRow,1, aRow, Width );// on verifie la ligne
          for ii:=low(tmpPoss) to High(tmpPoss) do
             if  tmpPoss[ii] = 0 Then
               exclude(candidates,ii); // toutes les valeur trouve sont exclu
     
          tmpPoss := CheckPosibilite(1,aCol, Height,aCol);// on verifie la colonne
          for ii:=low(tmpPoss) to High(tmpPoss) do
             if  tmpPoss[ii] = 0 Then
               exclude(candidates,ii);
     
          k :=(((aRow-1) div 3)*3)+1;//détermine la premier ligne du group
          l  :=(((aCol-1) div 3)*3)+1;      //détermine la premier colonne group
          tmpPoss := CheckPosibilite(k,l,k+2,l+2);// on vérifie les groupes
          for ii:=low(tmpPoss) to High(tmpPoss) do
              if  tmpPoss[ii] = 0 Then
                exclude(candidates,ii);
          result := candidates; // ne reste plus que les candidats potentiel
       end;
    end;
     
    Procedure InitCheckBordPoss ;
    var
      i,j : Integer;
    begin
      // verifie les colonnes et les lignes
      for   i:= 1 to Height do 
      begin
        For j:= 1 To  Width do
        begin
           FPoss[i,j] := DonnePossibilite(i,j)
        end;
      end;
    end;
    @+ Phil

  8. #68
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Serieux ?? Mais alors c'est pas un vrai sudoku ! T'es sur de ca ? donnes nous les reponses stp ! Si ils ont passés des mois a creer un sudoku qui en est pas un ...

  9. #69
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Non AI-Escargot possède une et une seule solution !

    Je peux te le garantir, ma solution fait une recherche exhaustive de toutes les solutions possibles, et AI-Escargot ne possède qu'une seule solution.

  10. #70
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    en fait pour l'escargot je sais pas
    j'ai confondu avec la première grille qui elle possède deux solution
    depuis j'ai changer de mode de résolution
    je suis passé de la resolution logique ligne ,colone, groupe
    a la methode dancing links ... j'ai des petit soucis de memmoire mais ca commence à voir le jour

    @+ Phil

  11. #71
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Par défaut Multi
    Je ne vois aucun pb a vous donner un logiciel qui verifie l'unicite
    (en millieme de seconde) Mais par esprit de compete je ne vous dirais pas comment je fais (du moins tant que le defit est ouvert)

    Comme je vous aime bien je vais vous soumettre une technique :
    Pour gerer les possibles pour une case on utilise neuf drapeaux correspondant aux 9 valeurs possibles
    Quand on veut connaitre les possibles on passe en revu la rangée, la colonne et la région et pour chaque série on positionne le flag de la valeur si la case est renseigné (dans Tcase..?). Quand on a fait les 9*3 27 cases on a non seulement le nombre de candidats mais aussi lesquels :

    Mick ; j'ai épluché la logique de AI escargot BON COURAGE
    Objectivement les garcons s'est beaucoup trop balaises pour nous pour la logique on n'y arrivera que par des brutes force: pas d'autres salut.
    On est la pour s'amuser pas pour battre des bataillons de mathématiciens

    Mais on a le droit de comprendre.
    On dispose de methode de base basiquement on les appellera la technique de l'orphelin et celle de l'obligé
    l'orphelin c'est
    123 456 78x le x est orphelin

    par contre si en calculant les reveles d'un sous ensemble de 9 une valeur de possible n'est pressente qu'une fois la case aura obligatoirement cette valeur

    Partant ce ses deux principes on a identifies des variantes. Mais se sont les deux seules qui permete de placer une case. Les autres technique 'X_wing,triplet...) ne permettent elles que d'ecarté des possibles : elles font hypoteses justes!!!!ionne comme les cribles; elles enleve les mauvaises
    Pour résoudre une grille de sudoku il faut enchainer des techniques de base
    et soudain si vous etes bloqué vous faites arbitrairement un choix pour une case parmi ses reveles; on fait une hypothèse (classique) jusqu'a pouvoir enchainer nos techniques.
    Une de ruse consiste donc a ne pas avoir de debut et d'obliger a commencer par une hypothése

    Pour escargot vous avez 24 révélés(le 1 est trivial)
    il reste 57 cases Comment choisir la case et le bon révélé?
    Bon la vous avez une grille d'homme
    Mais escargot c'est une grille de record du monde alors il
    a élevé la barre:
    Avant de pouvoir attaquer une série il vous faudra AU MINIMUM
    faire 9 hypothèses soit 5^9 (1 953 125) essais
    Comment vous en rendre compte...
    Vous prenez le problème et vous renseignez les 27 premieres cases
    et bien malgré cela vous aurez beaucoup (beaucoup) de mal a remplir la grille
    Si parcontre vous donnez au depart Reg 4 et Reg 5
    475 312
    913 586
    628 794
    la solution est triviale On pourrait s'amuser a ajouter des reveles sans que le problème soit soluble par la logique.
    Alors que le mixa est 30 je suis sur que l'on arriverait a 40...

    Pour moi la tache est impossible pour un solveur logique d'amateurs que nous sommes
    Il serait peu être judicieux de tester la vitesse des solveurs en prenant une collection publique de plusieurs milliers de pb et de chronometrter le temps moyen
    Docteur Sudoku est indisponible: il opère escargot
    Boris

  12. #72
    Membre éprouvé
    Avatar de Félix Guillemot
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 149
    Par défaut Des pistes
    Je lis vos posts sur AI Escargot, et je me permets de me donner mon avis, rapidement...
    Tous les Sudokus y compris AI Escargot sont résolus par la logique. Il faut chercher ces méthodes logiques. Imbriquées les unes dans les autres et purement traduites en algo, elles sont efficientes.
    Il faut s'intéresser un peu au sudoku et les chercher.
    Dans cet exercice, c'est cette recherche de méthodes qui est intéssante, s'arrêter à la boucle la plus rapide, c'est dommage.
    Quand je dis par la logique, je n'exclue pas l'éventualité de poser une hypothèse quand cela est nécessaire pour explorer deux scénrarii ou plus.
    Il n'y a pas une seule vérité ou une seule méthode, c'est la combinaison de ces méthodes qui fait la force de la méthode.

  13. #73
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Citation Envoyé par Félix Guillemot Voir le message
    Je lis vos posts sur AI Escargot, et je me permets de me donner mon avis, rapidement...
    Tous les Sudokus y compris AI Escargot sont résolus par la logique. Il faut chercher ces méthodes logiques. Imbriquées les unes dans les autres et purement traduites en algo, elles sont efficientes.
    Il faut s'intéresser un peu au sudoku et les chercher.
    Dans cet exercice, c'est cette recherche de méthodes qui est intéssante, s'arrêter à la boucle la plus rapide, c'est dommage.
    Tout a fait d'accord !!

    Citation Envoyé par Félix Guillemot Voir le message
    Quand je dis par la logique, je n'exclue pas l'éventualité de poser une hypothèse quand cela est nécessaire pour explorer deux scénrarii ou plus.
    Moins d'accord ! Non, serieusement, je pense qu'il est possible de résoudre sans hypotheses ... Mais la est le hic : comment ??


    Citation Envoyé par Félix Guillemot Voir le message
    Il n'y a pas une seule vérité ou une seule méthode, c'est la combinaison de ces méthodes qui fait la force de la méthode.

  14. #74
    Membre expérimenté
    Avatar de Pascal Fonteneau
    Profil pro
    gérant
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : gérant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Par défaut Reponse pour fullspeed et mick605
    BJ

    FullSpeed Disait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Envoies quelques grilles je verifirai: tu as peut etre raison!
    Mais en general les solveurs logiques opnt une oiption pour verifier
    En voila 100 et dis moi si certaines on plusieurs solutions. Je n'ai pas les moyens de le tester, mais je ne crois pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    1..3..8..326...1...9...6........4.6..1..52...734....2.2.85....7.....8.4......9.5.
    6....2...219....7...3.6....1.52......6.93....4.76..8.9....8.4.5..815..97.....7.6.
    ..9..34..8....5....61.2..5...7....23.9.3...6..5..79..4.......487.3..1....1..527..
    .9576184..1.28........9..1.6...5.....4..3.....71..8.9........5.7.96..23.3.....96.
    ......1566....2...14.63...7..8.24.71.613.....57..6....93..4.7..4...98........329.
    .4..58...3.1.795..8..2..7......2....2.64..917..5.1.382973....2.1...478.3..4.....6
    8.6.5.........3...12...6....8....5...1...54.3.....9628........1..96..7.456.7.48..
    2.47.81..7.....3..56.3.9..8.9.45.....4..2..17....97.35.7263..94...9..67.........3
    .73....1..56.8.23...45.7.6....6.87.5.......8....97.6......5...27.........12.6437.
    ...8.......5.......647..92.......8.5.31.9.246..81.439.....2518..8...6.3..2.....5.
    .946.51...519..4......3...9....68.4.......5...25..4.9......3.......9.8..64....21.
    .......8...736.1..6..24.9..2...1.3...79.32.65..5........3.748....8.2..7..5.9..6..
    .725.4..9.581.....3...7..42261..537...38..91.9........5..2.6..11..9...578......34
    .1....25...6.9...3.2..546....4.3...1..2...5......6..2...75...6.8.97.6....5..43.9.
    ..4...56....7...2...6.5...751...3......2.5791.89.1...4.4..69.13692...8.....84.9..
    ...21.5.92..47.6..4.3.6.2....21......59....74......31...4....6..........37.64..2.
    ..5..4..6.72...9.....9.....5.97...133..641..81.4....27...3.9..4....17.3......6.52
    274.6......541...7.....5..9.4129..56.5.1.3...9...8..3..8.63............1....749..
    .2..4...7..1.......4.5....82159...8.86......9..94..1..436.25.9....16..........72.
    5.9...2.....9....5721.4..6..1...685........4....17493685...71.4.....2..313.8.....
    .72..634.....5..8.....7.6.142.1....7.356298....9.3.....5.........49....2.....7..3
    6......1........4..8..47.95....9.85....3...6..7.6.84.3.2.9..53...5.6...486.45.1..
    51..789..64....12.37........9..46........9.8.......7..9..8..612....9.....6.1....3
    .67.5.3...8..1.46...234..57..9....841.....29...3..5......8..7.62.8.63...63....1.8
    ...612.45....5..89.5..492...9..2.........5...8.5..3.14.16.748..7..26.4....2.....1
    4.3....8..867..5..1......6.6...4........79.5..5.1.3..68........7..56.492...4.2.18
    ......468..69.....378..2.9.4...7..2.1..38....9..2.46...19....42......973.23..5.1.
    8.42......91..6...2...3847.4....2..19.....8.....3..26.5.8....94.3948...........3.
    .....4.35.4216.9.7.....5.2..6...2....7.6..3.4..4..91.........13.8..2..9.9.751.2..
    91..27......6.....8.59....12........64..1.28...8.6..43.2..731.9.9.....7..8.25...6
    5.8..6.14....4.7....7.593.88.....6.9462.93..1..9.1.......1...73....3.8..7.65.....
    ........4.945.....7.19...8..32.....7...8..1..61.75.....5..8..92...32.416..6.....5
    .862.....7.3...........5.7...48.9.5.2....7683..1..3.9..5...2.4.3....4819...9.8..5
    ..16.74..9.4.....3...2.........16...569.2..4...2.....7.2.3.1...78.....5...65.8..2
    65.....3...4...2.8..2.831..2..8.........2.4..7.3...51....1....41..75..9.......7..
    ...36.5.98..579.4......871.42....1..6...3.4.8.......372..91.65.1....6.....57.....
    4.8..7.5..15....97..241...354.....3.1...6...9.9....8..7....1.....98..1..86.324...
    ...8............43.1..72.8..61.......549..1.8.92.3.........6..5..94..672..8.5.9..
    6.8........5.2.7.......73.....1.56.......2..49568...2.2..5.38.13....6..5..92...6.
    18.24.3.747..9...66....3..12.....8.....6.1.5......5..3.98.521..3......7.......2..
    7....1...8...5.4.63...24...92.6.....6.4..2....53.7..69.79....1.....1..45.....36..
    8....3.9.6..84935..19......7.....81..5..6..392..3..6.....2.8...9.1..6.....3975.62
    .6.94.5....18..46..73.6.82..39...21.5....9.....8.1.....26..8.4.......1...845..7..
    .1.739...52.6..9..8.....71..7...4..3.5.38..7.......2.5.912534.....1.....7..8.....
    59.1......61..4.9..........8...3...6...6..23...482.1.....59..2....4.795.4......83
    ...6.3..451...8..2....2..3...6...49.........7.829.7..64.8..91...5.8..9....1.64...
    4...85.61.8...45..6..173...2.1...7.9....97.3....3...4...526...7.....831......9...
    .....3.1..1.48.3.52.7....8...5..1..3.......2..6....8.71.4..........347916937....8
    ....8..5.682.7....97.4..82....318.76.56....1.3..7.5.....4.5..6...7142.8.....9.1..
    2......7.9..51...2..3..48.......51..85.....94...78...671...86..5..3........6.79..
    89.4.7...17..5...........3.6.8..391.5.....7..4..9..32....8..146....32........4...
    ..7....82.2.9.74.1.9...4.7..6....3....1.....8..5..9...73...6....16.8...3....312.5
    38....9....59.36....78......14..8.5..2..4...7........9.63.1.7....2....9...978..1.
    .6.3.84911....7...5...1.36....6.3.7..187....96...8.24.......5...4.8........5.69.2
    1..9..5.7.9....124...715.....6..17......6.85...48.93.....2...1...934..8.3..1.....
    .67....5.4.1...8..3..7.4..6....412.....8.364.......531.........8.4912....926..3..
    .1...6..5.54...69....3....84.8..9.1.7..56..2...6...7391...32..7.8....15..6..7...2
    .214...3....8......4.5...6............436725...7...1.4.6.7.23..1...4.792..39.....
    4..3..52.3....47..5.62.79.3..8.4.6.1.9...8..5....3.....4...2...91...3..2...96.4..
    ..9..568..2...491..3.....543....61...6..89...9.725.3....5.1.2..4....7..12....8...
    479..3...5......34.1........2..1....6.8.241.......9...79..8..533561..7...8.53.9.6
    ....5...87......4...2.....16......3.51.7.....83...47...7186..25.4.2...9..8....6..
    ...6.3..1..7...5.238.......2...9..6...6.183.....5.2.7.4..8..6..5.3.2.89..6......7
    74.8........24..8...16...5353..1.2..16...83......2...9..7.5.82421.9.7......4.....
    ...14637.8.479....1...35......4.8....7.5...9.2.5...4.39.....5..35.67.184.1.3..26.
    .6432...55.1.9...6....6.4.........2.849.....32..67....92.14.3.71...5..4...87...9.
    .14..86.......1.8.52..7...467.9..8..3.1.8.27.......5.9......7.2..6.......3.26.491
    25......4...49...6..1.......1.....8.....3.....82.75.938...51.6.6..94.8...2.....3.
    ....296...4.......6.8.53.1.81.....5...47....2.6....178..98.........7....78124...3
    .2......8....426.746..1.....394..1.........92..1.5....5.2..643..1.2.975.3........
    ..562......891...2.9.7.5...65...9437..9.3..162........5..1...4.3.6.....19..3...2.
    73......1...9.8.729...1.8....3.65.1.5..7.2....6..8.9.58..5.1....1.8.4.3..75....8.
    .5..9...6.....6....31.2.....8..7.3...4...875...7.42..9...4351..4.2......3...1....
    6......8.2.....1...1....5.7.364...2149.5.2...12..69.5.....34.6.7..6.5......871.4.
    4...76..58.6.....4...4.39.8..2..1....349.5..151............2....68.972..27..6..1.
    ...27....76..9..819..1..4......68......5.9..4...41.6572.89..5.6..5...3.......3.4.
    ..254.....83...7.46......1.41..5.8.7...683.....9.1.5..5..1.6.9.....39.....7...6.1
    ....85..9.......8.4..6..72..9..1..35..3.7.6...5..6...26....9..4..8......91.7.....
    ....2.93.8....4..5...6..1..6..2....7..2..9.8.14..8....4.19......57..82.3..83.74..
    .4.....89.6.9.71....98317.6....82.6.9...5.8.7.74..........68.2....17.....1...54..
    7...9.4...458.6.196..745......2.4.....71...8.....8.3.4.6.......1.....8...2.97.561
    .687..3...2.91.8.6.73..5......6..7.8......45.3824..9.17.1.9.....35..8.........2..
    ..1......65..7128.8.9...7..2...64..5.6...51....51.2.4....4..8.634.9.........1..2.
    ...3.42.18...9.4.7...8...3..5..6.14.63.9..7.578....69.298.4..5.14..3.......6..9..
    .9......8...5.64..4.1...6....31..2....67...14.79..23...6.4.1....1.2..79.5........
    ...4....1.9..5..7....1634.83.7......1..829.36.6..7.1.27......6..89.1....2.47.....
    ..2..7..48.3...72..71...93.64...15.9.....824..1........2..1....7...9.6.8....54...
    256.7...9.....1......4.2..7.8....6.27..58.13..4.2..9.5..2.6.8......3.521..89.....
    ......1..4..2..38....94..2..85.2.79..9..8.2.1..35.9..851.3.84.2..9175....7.......
    ...53..2...17..6.....2.8.95.25...3.6.7......2.46..1.7.7....2.5..3..8.9....9..7...
    8579..1.....3.27.6.....5...7186.39.....1....76.9..7.........4812..4....9....5..62
    6...2....29.51.6.8.4.....57.3..56.7.5.67.1..2.1......99........873...1..1....93.4
    957.4.....6.1...8..1...5................268.35...84..6.389.76.4.........7..85.31.
    ..5.4..63..87...1.3....5...8.1..9....4.13.9.8.924..5....9....76..3......68.27....
    7.8..6.9.5..7..4....951.7....2.8.1.563..........6.2.79...1.....2.1.37....9.8..61.
    ..39..1684.....9..8...2.5.4...17..3..453......1..4.7..9..58....12...93....8......
    3.4..7.1...21..6.......479.45..7..6....98..7....3.5...6.7...2......5.8..2.57.31..
    2....43.718...5.46....91...97.5......24..9.3.5..846.2..9..1....8..9.35.44......9.
    247.5..39...7..2.583....4.....1...6..7..83....526.7...92..7..5..8.....2....4.9..3
    ...........465..7...2..93.......7....5.....92761...48.847...6..3......4..16.32...
    Mick605 disait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    De quoi tu parles quand tu dis 6 recherches possibles ??
    en fait un wings peut être trouvé à differents endroits. les routines de recherches sont donc + ou - differentes
    Pour les wings cas suivants, avec 2 candidats:
    - dans 2 colonnes, en supprimant les candidats dans 2 lignes
    - dans 2 colonnes, en supprimant les candidats dans 2 régions
    - dans 2 lignes, en supprimant les candidats dans 2 colonnes
    - dans 2 lignes, en supprimant les candidats dans 2 régions
    - dans 2 régions, en supprimant les candidats dans 2 lignes
    - dans 2 régions, en supprimant les candidats dans 2 colonnes


    Pour moi tout est là http://www.mots-croises.ch/Manuels/Sudoku/

  15. #75
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Citation Envoyé par Pascal Fonteneau Voir le message
    en fait un wings peut être trouvé à differents endroits. les routines de recherches sont donc + ou - differentes
    Pour les wings cas suivants, avec 2 candidats:
    - dans 2 colonnes, en supprimant les candidats dans 2 lignes
    - dans 2 colonnes, en supprimant les candidats dans 2 régions
    - dans 2 lignes, en supprimant les candidats dans 2 colonnes
    - dans 2 lignes, en supprimant les candidats dans 2 régions
    - dans 2 régions, en supprimant les candidats dans 2 lignes
    - dans 2 régions, en supprimant les candidats dans 2 colonnes
    A ok ! Mais les techniques sont identiques, il est possible de les regrouper dans la meme procedure !

  16. #76
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Par défaut logique suite
    Quand on regarde les methodes utilisées pour resoudre escargot on se rends compte que TOUS les solveurs sont POUR NOUS des Brute Force (ce qui n'empeche pas la récursivité ni la méthode

    Ils parlent tous de backtrack qui sont en realite le nombre de récursions inutiles. La methode de récursion ayant été standardisée

    Il faut dire que la méthode est simple a programmer par rapport à la logique
    En realité on ne trouve de la logique que dans les playeurs qui fournissent eux une aide.

    Je vérifies les grilles et je met l'appli à disposition
    Franck a priori tu utilise toi aussi la recursion; As-tu quelques chronos?

    Boris

  17. #77
    Membre éprouvé
    Avatar de Félix Guillemot
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 149
    Par défaut
    Citation Envoyé par mick605 Voir le message
    Tout a fait d'accord !!

    Moins d'accord ! Non, serieusement, je pense qu'il est possible de résoudre sans hypotheses ... Mais la est le hic : comment ??

    Je pense que là on atteint Le point intéressant, en s'éloignant un peu de l'informatique peut être...
    ça c'est un vrai défi : si tu trouves comment résoudre toutes les grilles par la logique et sans poser d'hypothèses, tu gagnes ce défi.
    personnellement, les algos de bourins qui balancent des chiffres aléatoirement pour trouver la solution comme des hackeurs, ça m'intéresse moyen, même si ils gagnent le championnat de la picoseconde.
    Je rappelle pour la petite histoire que la combinaison de méthodes que j'ai mise au point (et qui est juste traduite en Delphi) avait pour ambition de battre n'importe quel joueur de Sudoku, l'idée était une série de méthode qu'on applique sans réfléchir qui enlève les instants d'hésitation et les fausses routes, une sorte de fil d'Arianne si on se place dans l'univers de la mythologie.
    En changeant son point de vue par rapport au Sudoku, je pense qu'on peut y arriver. Rappelez vous Champolion, il n'a pas trouvé en 2 jours, pensez à Da Vinci Code...
    Ma tresse de méthodes résoud la très grande majorité des Sudokus, mais il faut parfois la combiner avec la pose d'une hypothèse comme dans le fameux gastéropode...
    Regardez la grille de Sudoku comme un système d'équation à n inconnues
    Si je pose
    2x - 5y = 0
    il y a 1 inconnue de trop pour résoudre le système (plus d'inconnues que d'équations), il y a une infinité de solutions...
    Si par contre je rajoute l'équation
    x - 4y = 0
    Il y a deux équations, deux inconnues.
    Un sudoku digne de ce nom, c'est à dire qui ne possède qu'une et une seule solution EST un système d'équations qui a UNE solution et qui peut donc être résolu par la logique.
    Je suis convaincu par ce raisonnement, mais avoue ne pas avoir été totalement au bout par manque de temps, voila pourquoi il est intéressant de vous le soumettre.
    Vous vous êtes rapidement aperçu qu'avec une approche d'informaticien pur, on pouvait résoudre AI Escargot très rapidement, ensuite vous vous êtes focalisés sur l'optimisation des calculs pour avoir le plus rapide (cf FullSpeed).
    Il ya deux façons d'aborder les choses :
    • soit avec des techniques d'informaticiens : on part de l'informatique
    • soit avec une logique humaine que l'on traduit en informatique pour automatiser des tâches fastidieuse

    La deuxième approche meconvient mieux et est la plus souvent utilisée.
    Chacun vit l'informatique comme il le souhaite.

    Je vois poindre à ce stade du défi une réelle ambition avec Mick qui est de chercher la tresse méthodique qui permettra de résoudre le Sudoku par la logique.
    Je vous ai mis sur la piste avec le système d'équation, lachez prise avec vos convictions et votre tout puissant savoir (n'est ce pas Pr Sudoku ?) et essayez de vous dépasser...

  18. #78
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Citation Envoyé par FullSpeed Voir le message
    Franck a priori tu utilise toi aussi la recursion; As-tu quelques chronos?
    Evidemment que j'ai des chronos. Mais je ne pense pas que je doives vous les donner avant la fin du défi .

    Je dirais juste une chose, si je lance la résolution à partir d'une grille vide (donc avec 0 révélé), ça donne un générateur qui retourne tous les carrés latins possibles et imaginables...

    J'arrêtes volontairement la recherche des solutions lorsque j'arrive à 1 000 000 de solutions.... au bout de 4 secondes (ce qui donne une moyenne de 4 microsecondes pour trouver une grille !).
    Si j'enlève la mémorisation des solutions trouvées et que je me contente de les compter, je trouve 1 000 000 de solutions en 2 secondes ! (soit 2 microsecondes pour trouver une solution !).

    Bon d'accord, j'ai une config assez puissante (Core 2 Quad 2,66 GHz, 4 Go DDR3)...

  19. #79
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Par défaut methode universelle
    Il est possible quelle existe comme une methode pour enumerer les Nombres premiers: le fait de ne pas les avoir trouve ne signifie pas qu'elles n'hesiste pas
    Dans une recherche methodique je reste persuade que toutes demarches commence par comprendre comment fonctionne les reveles. On a qu'eux et c'est d'eux que vient la solution

    En prenant le problème a l'envers on a decouvert quelques techniques
    mais tant que l'on aura pas compris leurs fonctions caches, on ne trouvera pas de méthode. C'est du moins mon avis.
    Le problème de la vitesse est exactement le même que l'usage de Grands nombres; on modifie l'echelle et certains problèmes disparaissent mais d'autres prennent leur place.
    Si un BF permets de trouver la solution de toutes les grilles Il ne présente aucun intérêt intellectuel pour la conception : c'est de la technique et la maitrise de ses outils: langage et hard. On ne 'pollue' le problème avec la conception; notre métier c'est de faire fonctionner les ordinateurs au mieux de leur possibilités et pas trouver une nouvelle méthode de tri ou de compactage ou autre

    Attention on a bien sur le droit de chercher et trouver des algos nouveaux mais il faut être objectif Il y a beaucoup de gens qui cherchent, et parmi eux des gens brillants, et les découvertes sont rares et ce qui interesse l'utilisateur final est que son probleme soit traité par l'ordinateur le plus vite possible pas de savoir si le programmeur faisait du C ou du Pacal, s'il faisait de l'objet ou du recursif

    Plus mon solveur ira vite plus je pourrai essayer de fabriquer des grilles méthodiquement. pour chercher a comprendre les mécanismes du Sudoku et participe a la connaissance humaine.

  20. #80
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Citation Envoyé par Félix Guillemot Voir le message
    Je pense que là on atteint Le point intéressant, en s'éloignant un peu de l'informatique peut être...
    ça c'est un vrai défi : si tu trouves comment résoudre toutes les grilles par la logique et sans poser d'hypothèses, tu gagnes ce défi.
    personnellement, les algos de bourins qui balancent des chiffres aléatoirement pour trouver la solution comme des hackeurs, ça m'intéresse moyen, même si ils gagnent le championnat de la picoseconde.
    C'est ca ! En plus, je pense que tout le monde a en tête comment faire un algo bourrin, certes pas optimisé niveau informatique, mais quand meme ! C'est aussi pour ca que je me suis décidé a le résoudre par la logique, meme si l'idée n'est pas nouvelle !
    Bon ensuite, résoudre Toutes les grilles ... c'est une autre histoire !


    Citation Envoyé par Félix Guillemot Voir le message
    Il ya deux façons d'aborder les choses :
    • soit avec des techniques d'informaticiens : on part de l'informatique
    • soit avec une logique humaine que l'on traduit en informatique pour automatiser des tâches fastidieuse

    La deuxième approche meconvient mieux et est la plus souvent utilisée.
    Chacun vit l'informatique comme il le souhaite.

    Je vois poindre à ce stade du défi une réelle ambition avec Mick qui est de chercher la tresse méthodique qui permettra de résoudre le Sudoku par la logique.
    Yeah !

    Edit : Est ce quue quelqu'un verrait comment, par la logique, continuer de résoudre cette grille ?? Les solveurs d'internet n'y arrivent pas ! Et la solution est unique !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    084210590
    056409800
    009058040
    047501938
    508090004
    931804075
    090045780
    800900450
    475182369
    Je cherche a savoir quelle technique il faudrait que je code !

    Edit 2 : J'étais en train de chercher des grilles diaboliques, et le je tombe sur une grille avec 8 valeurs ! A vue de nez, il doit y avoir plusieurs solutions !!

Discussions similaires

  1. Défi Migration de delphi 3 à delphi 8
    Par sitalebs dans le forum EDI
    Réponses: 8
    Dernier message: 03/01/2008, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo