Une bibliothèque pour générer et manipuler des anagrammes.
CEIINOSSITUU | UT TENSIO, SIC UIS
Robert Hooke, De Potentia Restitutiva
(exige '[d4hines/anagramaton.core :as a]);; La bibliothèque nécessite un dictionnaire en entrée, sous la forme d'un tableau de chaînes. Voici un exemple.(defwords (str/split (slurp "/usr/share/dict/words") #"n"));; Ensuite, nous devons effectuer un prétraitement sur le dictionnaire (def word-map (a/dict->word-mapwords));; Vous pouvez maintenant commencer à former des anagrammes !(a/anagrams word-map "read") => #{["Cher"] ["Oser"] ["Lire"] ["A" "Rouge"] ["Annonce" "Re"]}
Les chercheurs en psychologie étudient la capacité des sujets à résoudre des anagrammes. En tant que tels, ils ont besoin d’un moyen de générer et de vérifier la solution des anagrammes.
Pour les besoins de ce projet, les définitions suivantes sont valables :
Mot : un des mots standard Unix.
Anagramme : un mot ou une séquence de mots formé en réorganisant les lettres d'une autre chaîne, telle que rant creep , formée à partir de charpentier .
Anagramme Puzzle : une chaîne qui n'est pas un mot mais une anagramme.
Solution Anagramme : un mot composé des mêmes lettres d’un anagramme donné.
Anagramme insoluble : une chaîne qui n'est ni un mot ni une anagramme (un terme inapproprié, hein ?).
La solution doit :
Soyez une bibliothèque clojure...
Cela peut générer des énigmes d’anagrammes.
De difficulté variable...
Et vérifier qu'un mot donné est la solution à une anagramme donnée...
Tout en étant suffisamment rapide pour être utilisé de manière interactive au REPL.
Le service Wordsmith propose un nombre impressionnant de boutons que vous pouvez tourner pour créer de superbes anagrammes. Cette chose est géniale. Tellement tenté de créer simplement une bibliothèque client pour leur API et d'avoir terminé...
https://en.wikipedia.org/wiki/Scrabble_letter_distributions Qui aurait pensé
http://norvig.com/mayzner.html - Très bonnes explications, mises à jour des tableaux bigrammes https://stackoverflow.com/a/12477976 - algorithme de base pour trouver des anagrammes d'un seul mot http://pi.math.cornell.edu /~mec/2003-2004/cryptography/subs/digraphs.html - Table Bigram que j'utilise https://web.stanford.edu/class/cs9/sample_probs/Anagrams.pdf - bonne explication de l'algorithme http://www.ssynth.co.uk/~gay/anagabout.html - implémentation, mais avec des détails de mauvaise qualité
https://stackoverflow.com/a/881367 - inspiration
Merci à @seancorfield, @dpsutton et @porkostomus pour leur aide avec l'algorithme d'anagramme partiel !
Allons-nous traiter des phrases Anagram (anagrammes multimots) ?
Chaque définition que j'ai lue jusqu'à présent définit un anagramme comme un « mot, une expression ou un nom ». Bien que je ne sois pas enthousiasmé par la complexité supplémentaire que les anagrammes de plusieurs mots ajouteront (des ordres de grandeur supplémentaires), je pense qu'ils doivent être traités pour rester fidèles au problème.
Qu'allons-nous faire pour optimiser la vitesse ?
Le moins possible. Optimisation prématurée et tout ça.
Comment va-t-on mesurer la « difficulté » ?
Voir la section suivante.
Comment diable mesurez-vous la difficulté des anagrammes ? Il s’avère que cela fait l’objet de nombreuses recherches et débats universitaires.
Voici le résumé rapide et simple de mes recherches jusqu'à présent :
Mayzner et Tresselt semblent être des autorités historiques en la matière, et sont cités par de nombreuses études comme celle-ci.
Ils ont une tonne d'études qui examinent les effets de différentes études, par exemple celle-ci.
Beaucoup de choses me sont passées par-dessus la tête, mais il semble que la fréquence des bigrammes soit l'une des