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

Langage PHP Discussion :

[Système] Système de Sudoku qui bugge


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut [Système] Système de Sudoku qui bugge
    Bonjour,

    Je suis en train de créer un système de Sudoku pour ... pour rien Mais je pense que c'est une bonne expérience c'est pourquoi j'ai entamé son développement. Le script est actuellement quasi fonctionnel, à savoir qu'il n'y a pas de doublon ni dans les lignes ni dans les colonnes. Le problème subsistant étant qu'il arrive souvent que dans le tableau du sudoku complet, quelques valeurs manquent à l'appel ce qui ne devrait pas arriver. Voici le code :

    Code php : 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
     
    <?php
    // On déclare le tableau de possibilités et du sudoku
    $possibilités = array();
    $sudoku = array();
     
    // Chaque ligne et chaque colonne peut contenir un nombre de 1 à 9
    for($lignes=1;$lignes<10;$lignes++) {
    for($colonnes=1;$colonnes<10;$colonnes++) {
    $possibilités[$lignes][$colonnes] = '123456789';
    }
    }
     
    // Pour chaque ligne du tableau de sudoku
    for($lignes=1;$lignes<10;$lignes++) {
     
    // Pour chaque colonne de la ligne du tableau de sudoku
    for($colonnes=1;$colonnes<10;$colonnes++) {
     
    // On prend dans le tableau de possibilités une valeur au hasard
    $valeurCase = substr(str_shuffle($possibilités[$lignes][$colonnes]),0,1);
     
    // Pour chaque case de la ligne
    for($col=1;$col<10;$col++) {
     
    // On enlève des possibilités  la valeur tout juste générée
    $possibilités[$lignes][$col] = str_replace($valeurCase,'',$possibilités[$lignes][$col]);
    }
     
    // Pour chaque ligne de la colonne
    for($lig=1;$lig<10;$lig++) {
     
    // On enlève des possibilités  la valeur tout juste générée
    $possibilités[$lig][$colonnes] = str_replace($valeurCase,'',$possibilités[$lig][$colonnes]);
    }
     
    // On stocke la valeur dans $sudoku
    $sudoku[$lignes][$colonnes] = $valeurCase;
    }
    }
    print_r($sudoku);
    ?>

    Le print_r retourne le tableau, qui se trouve comme vous pouvez le constater, amputé de quelques valeurs (entre 2 et 5). Je n'ai pas réussi a trouver l'origine du problème :/

    Comment corriger ce bug ?

    Merci d'avance,

    Shuny

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Alors là je suis pas du tout sur de moi. Mais je dirai que c'est un probleme de conception en fait.
    Parce que tu pars d'une grille vide, et tu pars du principe qu'en choisissant tes valeurs au hasard une par une (et donc en les interdisant de la ligne et colonne où tu mets la valeur) tu arrives TOUJOURS à un sudoku correctement rempli.
    Or dans mon cas, là où j'ai des "false" c'est parce que le seul nombre disponible sur la ligne existe deja dans ma colonne donc il a été retiré aussi et donc il n'y a plus de valeurs envisageables.

    Maintenant comment le corriger je ne sais pas exactement mais je pense que ca vient du fait que tu ne peux pas créer un sudoku automatiquement comme ca.

    EDIT:
    J'ajouterai autre chose : tu as oublié une condition du sudoku en plus => il ne doit pas y avoir de chiffres identiques dans une meme colonne, une meme ligne ainsi que les carrés de coté 3 (1à 3, 4 à 6, 7 à 9) or tu ne respectes pas cette condition non plus

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Pas mieux. Je pense qu'il n'est tout simplement pas possible de créer une grille comme de cette façon. En tous cas, pas à tous les coups.

    Et juste une remarque : php n'aime pas beaucoup les accents dans les noms de variables. $possibilités n'est donc pas un bon nom de variable...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut
    Citation Envoyé par koopajah Voir le message
    Alors là je suis pas du tout sur de moi. Mais je dirai que c'est un probleme de conception en fait.
    Parce que tu pars d'une grille vide, et tu pars du principe qu'en choisissant tes valeurs au hasard une par une (et donc en les interdisant de la ligne et colonne où tu mets la valeur) tu arrives TOUJOURS à un sudoku correctement rempli.
    Or dans mon cas, là où j'ai des "false" c'est parce que le seul nombre disponible sur la ligne existe deja dans ma colonne donc il a été retiré aussi et donc il n'y a plus de valeurs envisageables.

    Maintenant comment le corriger je ne sais pas exactement mais je pense que ca vient du fait que tu ne peux pas créer un sudoku automatiquement comme ca.

    EDIT:
    J'ajouterai autre chose : tu as oublié une condition du sudoku en plus => il ne doit pas y avoir de chiffres identiques dans une meme colonne, une meme ligne ainsi que les carrés de coté 3 (1à 3, 4 à 6, 7 à 9) or tu ne respectes pas cette condition non plus
    J'ai aucune idée de comment créer un Sudoku automatiquement, si tu as un algorithme je ne suis pas contre

    Citation Envoyé par Celira Voir le message
    Pas mieux. Je pense qu'il n'est tout simplement pas possible de créer une grille comme de cette façon. En tous cas, pas à tous les coups.

    Et juste une remarque : php n'aime pas beaucoup les accents dans les noms de variables. $possibilités n'est donc pas un bon nom de variable...
    Ah oui l'accent, j'en avais jamais mis et je voulais voir si ca marchait
    D'habitude j'utilise un nom du genre de $possibilitesDeLaGrilleDeSudoku mais la j'ai voulu faire court

  5. #5
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Si tu cherches sur google, tu trouveras des scripts tous faits. Certains d'entre eux donnent une looooooooongue explication sur comment ils génèrent des grilles. Je n'ai pas trouvé de site clair qui donne un algorithme rapide et bien expliqué hormis des sources (=> Google : Algorithme Création Sudoku)

    Dans le forum Algorithmes il y a aussi un long post qui en parle, je l'ai survolé mais ca pourrait t'intéresser
    http://www.developpez.net/forums/sho...ghlight=sudoku

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut
    Citation Envoyé par koopajah Voir le message
    Si tu cherches sur google, tu trouveras des scripts tous faits. Certains d'entre eux donnent une looooooooongue explication sur comment ils génèrent des grilles. Je n'ai pas trouvé de site clair qui donne un algorithme rapide et bien expliqué hormis des sources (=> Google : Algorithme Création Sudoku)

    Dans le forum Algorithmes il y a aussi un long post qui en parle, je l'ai survolé mais ca pourrait t'intéresser
    http://www.developpez.net/forums/sho...ghlight=sudoku
    Ok, je crois plutôt que je vais faire un algorithme d'hello world, c'est sûrement plus a mon niveau

    Merci quand même

  7. #7
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Disons, que les différents avis/conseils/exemples que je viens de lire ces 15 dernières minutes sur le sujet disent tous la même chose :
    il faut commencer par un algo de résolution de sudoku avant de s'attaquer a un algo de création !

Discussions similaires

  1. [WD17] Système de sessions, voir qui est connecté à une appli
    Par droliprane dans le forum WinDev
    Réponses: 16
    Dernier message: 08/09/2015, 11h48
  2. [SWIFT / Système de paiement CRI] Qui connaît ?
    Par tomsoyer dans le forum Autres langages
    Réponses: 3
    Dernier message: 21/01/2010, 22h54
  3. [Système] numero de ligne qui probleme eventuellement faux?
    Par SegmentationFault dans le forum Langage
    Réponses: 6
    Dernier message: 19/10/2007, 13h30
  4. Réponses: 9
    Dernier message: 15/05/2007, 18h01
  5. Réponses: 15
    Dernier message: 05/09/2006, 12h08

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