Dernièrement, j'ai été jouer à un jeu sur mon iPhone appelé Scramble. Certains d'entre vous connaissent ce jeu Boggle. Essentiellement, lorsque le jeu commence, vous obtenez une matrice de lettres comme suit:
F X I E
A M L O
E W B X
A S T U
Le but du jeu est de trouver autant de mots que vous le pouvez, qui peut être formé par une chaîne de lettres ensemble. Vous pouvez démarrer avec une lettre, et toutes les lettres qui l'entourent sont jeu juste, et puis une fois que vous passez à la lettre suivante, toutes les lettres qui l'entourent cette lettre est un jeu équitable, à l'exception de toute déjà utilisé des lettres. Ainsi, dans la grille ci-dessus, par exemple, je pourrais venir avec les mots - LOB
, TUX
, SEA
, FAME
, etc. Mots doit être d'au moins 3 caractères, et pas plus de NxN personnages, ce qui serait de 16 dans ce jeu, mais peut varier dans certaines implémentations. Alors que ce jeu est amusant et addictif, je suis apparemment pas très bon et j'ai voulu tricher un peu en faire un programme qui me donnerait la meilleure possible des mots (plus le mot est long, plus les points que vous obtenez).
Je suis, malheureusement, pas très bon avec des algorithmes ou de leur efficacité et ainsi de suite. Ma première tentative utilise un dictionnaire comme celui-ci (~2.3 MO) et fait une recherche linéaire d'essayer de faire correspondre les combinaisons avec les entrées d'un dictionnaire. Cela prend un très long temps de trouver les mots possibles, et puisque vous obtenez seulement 2 minutes par tour, il n'est tout simplement pas suffisant.
Je suis curieux de voir si tout Stackoverflowers peuvent venir avec des solutions plus efficaces. Je suis surtout à la recherche de solutions à l'aide de la Big 3 Ps: Python, PHP, Perl, bien que quoi que ce soit avec Java ou C++ est trop cool, car la vitesse est essentielle.
LES SOLUTIONS ACTUELLES:
- Adam Rosenfield, Python, ~20s
- Jean Fouhy, Python, ~3s
- Kent Fredric, Perl, ~1s
- Darius Bacon, Python, ~1s
- rvarcher, VB.NET (lien direct), ~1s
- Paolo Bergantino, PHP (lien direct), ~5s (~2s localement)
BOUNTY:
Je suis l'ajout d'une prime à cette question que ma façon de dire merci à toutes les personnes qui se sont mobilisés avec leurs programmes. Malheureusement je ne peux donner à la accepté de répondre à l'un de vous, donc je vais mesurer qui a la plus forte boggle solveur de 7 jours à partir de maintenant et le prix du gagnant de la bounty.
Bounty attribué. Merci à tous ceux qui ont participé.