Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Défi] Générateur et Solveur de Labyrinthes

    21 avril 2007 à 11:51:40

    Bonne idée de défi, mais donne moi UNE seule bonne raison de le faire en PHP et pas en C ?
    • Partager sur Facebook
    • Partager sur Twitter
      21 avril 2007 à 11:55:58

      bah tu peux le faire en C mais seuls les scripts en PHP seront pris en compte et noté.

      Plus sérieusement, il n'y a aucune raison de le faire en PHP plutot qu'en C, mais et puis ? Des codeurs PHP organisent des défis, et c'est cool. Si les codeurs C du forum n'en font pas on n'y peut rien ;)
      • Partager sur Facebook
      • Partager sur Twitter
        21 avril 2007 à 12:01:16

        Une bonne raison ?

        C'est dans la rubrique PHP :euh:

        Ok, je sors []
        • Partager sur Facebook
        • Partager sur Twitter
          21 avril 2007 à 12:32:13

          Strucky -> pas mal ;) chez moi le temps d'execution est de 0.06185507774353 sec

          Sinon donne nous une bonne raison de le faire en C et pas en php Webanix ;)

          bon courage aux participants ;)

          ++
          • Partager sur Facebook
          • Partager sur Twitter
            21 avril 2007 à 13:46:45

            Oui, 0.06 pour un 10*10, mais pour un 40*40, c'est un peu plus long :D

            Mais en fait le temps de génération dans mon script est en rapport avec le nombre de case du départ vers l'arrivée du labyrinthe, plus le chemin est court, plus ça va vite.

            Citation : Cdams

            Alors comment peut-on créer une structure d'arbre avec des tableaux ? Je ne vois pas trop comment on peut faire ça ?

            Autant créer une structure de Pile, c'est facile, mais un arbre, je ne vois pas trop :euh:



            En fait, j'étais comme toi au départ, mais en ayant bien étudié le problème sur papier, il s'avère que la solution est extrêmement simple ;)

            • Partager sur Facebook
            • Partager sur Twitter
              21 avril 2007 à 16:39:31

              Ca y'est j'ai finis. Et il est facile de modifier la taille des case, le nombre de case en largeur et en hauteur dans le script, j'ai mis des variables. Je les metterais peut-être par des GET si y'en a qui veulent faire des teste dessus.

              En attendant, voici une grille résolvable généré aléatoirement :

              Image utilisateur

              Pour info, j'utilise l'idée que selon moi (dans ce cas de figure seulement parcompte) , si on garde la main droite sur le mur le temps que l'on avance, on finira toujours par passer par l'arrivé. Sinon, on reviendra au point de départ à un moment ou à un autre, dans ce cas, on regénère un grille jusqu'a ce que l'on en trouve qui soit résolvable.

              Sinon, au niveau des performances, je n'ai pas trouver d'autre moyen de générer des labyrinthe résolvable que de les tester. D'où la lenteur lorsque la grille à générer est trop grande, surtout que j'ai l'impression qu'il est plus rare de tomber sur une grille résolvable lorsque celle-ci est grande. (A vérifier)

              Si quelqu'un à trouver une autre méthode ca m'intérresserait.

              Et une méthode pour trouver le plus cours chemin aussi (sans tout tester).
              D'ailleur, comment font les personnage de Age of Empires pour trouver le plus court chemin ?
              • Partager sur Facebook
              • Partager sur Twitter
                21 avril 2007 à 16:54:08

                Personellement avec mon algorithme de résolution, je suis limité quant à la taille de ma grille...

                Je ne peux pas faire plus de 44*44 case.

                Et vous, vous pouvez résoudre les grilles de n'importe quelle taille, ou vous connaissez aussi des limites ?
                • Partager sur Facebook
                • Partager sur Twitter
                  21 avril 2007 à 17:03:27

                  Citation : Cdams

                  Et vous, vous pouvez résoudre les grilles de n'importe quelle taille, ou vous connaissez aussi des limites ?


                  Pour moi la seule limite c'est la taille de la RAM xD
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 avril 2007 à 17:06:03

                    bah PHP ne me sort pas d'erreur... Il ne fait rien, je ne comprends pas pourquoi :euh:
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 avril 2007 à 17:15:45

                      Récursivité ?

                      Davidlouiz, tu as des pièces fermées dans ton labyrinthe ;)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 avril 2007 à 17:18:16

                        Ouais, j'ai des appels récursifs.

                        Tu penses que c'est à cause de ça que mon script "s'arrête" ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 avril 2007 à 17:23:23

                          Je pense que oui, car j'ai eu ce problème en passant par une génération par une fonction récursive, lors d'une 1ère tentative.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 avril 2007 à 17:38:45

                            D'après le texte du défi, les codes seront testés sur des grilles 10*10 et 40*40, donc a priori, pas la peine de se prendre la tête avec ça ^^

                            Enfin j'espère que c'est ça :-)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 avril 2007 à 17:54:43

                              Pour ce qui est de la résolution, j'ai trouvé un trus pour prendre des chemins plus cours.
                              Là où je bloc encore c'est sur l'estétisme du labyrinthe. Quelqu'un e une idée ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 avril 2007 à 18:33:42

                                Citation : winzou

                                Si les codeurs C du forum n'en font pas on n'y peut rien ;)


                                Il y a un défi C en cours. Faut suivre :p

                                Citation : Cdams

                                Alors comment peut-on créer une structure d'arbre avec des tableaux ? Je ne vois pas trop comment on peut faire ça ?


                                Pour avoir tenté d'implémenter ça dans ma version delta, je peux te dire que c'est d'une lourdeur monstre!

                                En fait, le problème est qu'il n'existe pas de structure en php. La clarté fournit par une structure est absente une fois que tu as crées une pseudo structure PHP que tu mets dans un tableau (multidimentionnel) ou dans une class.

                                D'ailleurs, je pense que ce qui manque le plus à PHP, c'est la notion d'adressage car faire des listes chainés sur ce défi serait le top.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  21 avril 2007 à 22:12:43

                                  pour trouver le chemin le plus court, comme le font les persos (joués par le CPU) des jeux vidéos, il faut utiliser la méthode A* (prononcez "A étoile" ou "A star").

                                  http://www.vieartificielle.com/index2.php?action=article&id=161
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 avril 2007 à 22:56:34

                                    Tu as des allées beaucoup trop longues dans tes labyrinthes, tu devrais essayer d'améliorer ce point ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      21 avril 2007 à 23:25:42

                                      Voui, c'est le principe de mon algorithme qui veut ça :)

                                      Mais il est rapide ^^
                                      Après faut faire ds choix...
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        21 avril 2007 à 23:32:20

                                        La rapidité n'est pas le critère majeur du défi, à moins que je n'ai pas tout saisi, enfin c'est toi qui voit :p
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          22 avril 2007 à 0:27:55

                                          Si le critère est le point le plus important alors je peux me vanter avec mes laby rapide mais peu aléatoire ^^
                                          Avec cette méthode (et une méthode de résolution particulière :p ), j'obtiens :

                                          Labyrinthe de 100x100
                                          Génération + Résolution : 58 ms
                                          Affichage (GD) : 61 ms

                                          C'est pas mal ^^
                                          Image utilisateur

                                          Mais on notera que le chemin est systèmatiquement l'équivalent d'une diagonale, et que les côtés externes (bas et droite) n'ont pas de trait sur leur dernière ligne pour pouvoir avoir un labyrinthe résolvable !
                                          Et enfin le labyrinthe n'est pas si aléatoire que ça ... mais il est simple à générer / analyser (suffit de voir les temps pour s'en rendre compte ^^ )

                                          En gros ma rapidité à un désavantage : c'est pas un super labyrinthe ^^
                                          mais bon, j'ai fais cette méthode dans le seul but d'avoir un script ultra rapide, pas de faire de superbes labyrinthes !


                                          EDIT : je vais changer de stratégie ^^ et essayer de faire un labyrinthe parfait tout en optimisant le temps d'exécution parce que le coup du labyrinthe peu aléatoire devient du raffistolage pour combler les côté :p
                                          Et puis c'est plus amusant de relever le defis de façon plus "honnête" ^^
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            22 avril 2007 à 9:01:13

                                            Dis voir jérémie, t'aurais pas oublié des +1 quelque part dans ton script, parce que la dernière ligne et la dernière colonne sont vides...
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              22 avril 2007 à 9:09:18

                                              Citation : Davidlouiz

                                              Ca y'est j'ai finis. Et il est facile de modifier la taille des case, le nombre de case en largeur et en hauteur dans le script, j'ai mis des variables. Je les metterais peut-être par des GET si y'en a qui veulent faire des teste dessus.

                                              En attendant, voici une grille résolvable généré aléatoirement :

                                              Image utilisateur

                                              Pour info, j'utilise l'idée que selon moi (dans ce cas de figure seulement parcompte) , si on garde la main droite sur le mur le temps que l'on avance, on finira toujours par passer par l'arrivé. Sinon, on reviendra au point de départ à un moment ou à un autre, dans ce cas, on regénère un grille jusqu'a ce que l'on en trouve qui soit résolvable.

                                              Sinon, au niveau des performances, je n'ai pas trouver d'autre moyen de générer des labyrinthe résolvable que de les tester. D'où la lenteur lorsque la grille à générer est trop grande, surtout que j'ai l'impression qu'il est plus rare de tomber sur une grille résolvable lorsque celle-ci est grande. (A vérifier)

                                              Si quelqu'un à trouver une autre méthode ca m'intérresserait.

                                              Et une méthode pour trouver le plus cours chemin aussi (sans tout tester).
                                              D'ailleur, comment font les personnage de Age of Empires pour trouver le plus court chemin ?



                                              Pour voir si une grille est résolvable il faut attribuer à chaque case un id unique, si l'on coupe une liaison entre deux case on remplace l'id de la deuxième case par celui de la première.
                                              (on fait ca avec toute les cases qui ont le meme id que la deuxième) si le départ à le même id que la dernière, c'est résolvable.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                22 avril 2007 à 13:44:33

                                                Citation : savageman

                                                Dis voir jérémie, t'aurais pas oublié des +1 quelque part dans ton script, parce que la dernière ligne et la dernière colonne sont vides...


                                                Non non, j'ai pas oublié, c'est fait exprès :p
                                                Si je remplis les dernières lignes je m'expose à une grille non résolvable ^^
                                                Mais comme je l'ai dit (tu n'as pas lu tout mon post !) cette méthode ne produit pas de labyrinthe parfait!
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  22 avril 2007 à 16:27:29

                                                  Quelqu'un aurait-il une classe pour les gifs annimés ?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    22 avril 2007 à 16:53:18

                                                    oui
                                                    google est ton ami
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      22 avril 2007 à 16:57:58

                                                      http://www.phpclasses.org/browse/package/3163.html

                                                      Il faut s'inscrire.

                                                      J'ai essayé avec un 40*40 et le temps de génération est énorme :D
                                                      Un peu normal, puisque ça tourne entre 300 et 500 images à créer.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Anonyme
                                                        22 avril 2007 à 17:29:14

                                                        le gif c'est long à générer ;)
                                                        en plus cette classe est pas super rapide ... elle est bourrée de trucs inutiles :)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          22 avril 2007 à 17:37:50

                                                          Ben donnes en une autre :p

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          [Défi] Générateur et Solveur de Labyrinthes

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                          • Editeur
                                                          • Markdown