Résolution de l'anagramme Ruby
Je suis désireux d'écrire un anagramme type de solveur en Ruby, mais il va travailler contre une liste de mots, comme si.
Liste de mots est:
the
these
one
owner
Je voudrais permettre à l'utilisateur de saisir des lettres, des e.g noe, et il recherche la liste de mots pour mots qu'il peut faire en utilisant les lettres que l'utilisateur a saisi et permettrait de ramener one
et si ils sont entrés "eth" ou même "la" il permettrait de ramener the
. J'ai essayé de penser à une manière efficace de faire cela, mais j'ai été boucle autour de chaque mot, remplacer une lettre dans le mot, la vérification du mot pour chaque lettre et les deux longueurs de match. Quelqu'un peut-il donner des conseils et une meilleure et plus efficace façon de le faire?
source d'informationauteur RailsSon
Vous devez vous connecter pour publier un commentaire.
La grande idée est que tous les anagrammes sont identiques lors du tri. Donc si vous créez une table de hachage (ne sais pas ce que Ruby appelle ces) de listes, où les touches sont triés mots et la valeur est la liste des mots qui trie à la clé donnée, alors vous pouvez trouver les anagrammes très rapidement par le tri de la parole et de la recherche dans votre hachage.
rrenaud la réponse est grande, et voici un exemple de la façon de construire un tel hachage en ruby, étant donné un tableau nommé "
words
" qui contient tous les mots dans votre dictionnaire:Le code ci-dessus suppose que ruby 1.9.2. Si vous utilisez une ancienne version de
chars
de ne pas exister, mais vous pouvez utiliser.split('').sort
.L'objet par défaut de la table de hachage est configuré pour être le tableau vide, ce qui rend plus facile de codage, dans certains cas, parce que vous n'avez pas à vous soucier de la valeur de hachage de vous donner néant.
Source: https://github.com/DavidEGrayson/anagram/blob/master/david.rb
Une solution pourrait être:
Je ne pouvais pas résister à la résolution de ce rubis quiz 🙂
L'idée de base est qu'il crée et le tableau, et qu'il utilise la fonction de permutation à venir avec le résultat. Il peut ne pas être efficace, mais je trouve ça élégant. 😀
Cela pourrait être ce que vous cherchez: Résoudre Des Anagrammes En Ruby
Voici une autre approche (c'est le haut de réponse): Anagramme Solveur En Python
Ici est très semblable à moi. Lecture à partir d'un fichier de dictionnaire et de comparer triés caractères dans un tableau. Le tri se fait sur les candidats présélectionnés.