Una biblioteca para generar y manipular anagramas.
CEIINOSSITTUU | UT TENSIO, SIC UIS
Robert Hooke, De potencia restitutiva
(requiere '[d4hines/anagramaton.core :como]);; La biblioteca requiere un diccionario como entrada, en forma de una matriz de cadenas. Aquí hay un ejemplo.(def palabras (str/split (slurp "/usr/share/dict/words") #"n");; A continuación, debemos realizar un procesamiento previo en el diccionario (def word-map (a/dict->word-map palabras));; ¡Ahora puedes empezar a formar anagramas! (a/anagramas mapa de palabras "leer") => #{["Estimado"] ["Atrevimiento"] ["Leer"] ["A" "Rojo"] ["Anuncio" "Re"]}
Los investigadores en psicología están investigando la capacidad de los sujetos para resolver anagramas. Como tal, necesitan una forma de generar y verificar la solución de los anagramas.
A los efectos de este proyecto, se aplican las siguientes definiciones:
Palabra: Una del conjunto de palabras estándar de Unix.
Anagrama: palabra o secuencia de palabras formada reordenando las letras de otra cadena, como rant creep , formada a partir de carpintero .
Anagrama Puzzle: una cadena que no es una palabra sino un anagrama.
Solución de anagrama: una palabra formada por las mismas letras de un anagrama determinado.
Anagrama sin solución: una cadena que no es ni una palabra ni un anagrama (un nombre poco apropiado, ¿eh?).
La solución debe:
Sea una biblioteca clojure...
Eso puede generar acertijos de anagramas.
De diferente dificultad...
Y comprobar que una palabra determinada es la solución de un anagrama determinado...
Además de ser lo suficientemente rápido como para usarlo de forma interactiva en el REPL.
El servicio de Wordsmith cuenta con una impresionante cantidad de botones que puedes girar para crear fantásticos anagramas. Esto es asombroso. Estoy muy tentado a simplemente crear una biblioteca cliente para su API y listo...
https://en.wikipedia.org/wiki/Scrabble_letter_distributions ¿Quién hubiera pensado alguna vez?
http://norvig.com/mayzner.html - Muy buenas explicaciones, actualizaciones de tablas de bigramas https://stackoverflow.com/a/12477976 - algoritmo básico para encontrar anagramas de una sola palabra http://pi.math.cornell.edu /~mec/2003-2004/cryptography/subs/digraphs.html - Tabla de Bigram que estoy usando https://web.stanford.edu/class/cs9/sample_probs/Anagrams.pdf - buena explicación del algoritmo http://www.ssynth.co.uk/~gay/anagabout.html - implementación, pero con detalles de mala calidad
https://stackoverflow.com/a/881367 - inspiración
¡Gracias a @seancorfield, @dpsutton y @porkostomus por su ayuda con el algoritmo de anagrama parcial!
¿Vamos a ocuparnos de frases de anagramas (anagramas de varias palabras)?
Todas las definiciones que he leído hasta ahora definen un anagrama como una "palabra, frase o nombre". Si bien no estoy entusiasmado con la complejidad adicional que agregarán los anagramas de varias palabras (órdenes de magnitud más), creo que deben manejarse para mantenerse fiel al problema.
¿Qué vamos a hacer para optimizar la velocidad?
Lo menos posible. Optimización prematura y todo eso.
¿Cómo vamos a medir la "dificultad"?
Consulte la siguiente sección.
¿Cómo diablos se mide la dificultad de los anagramas? Resulta que este es un tema de mucha investigación y debate académico.
Aquí está el resumen rápido y sucio de mi investigación hasta el momento:
Mayzner y Tressselt parecen ser las autoridades históricas en la materia y son citados en muchos estudios como este.
Tienen un montón de estudios que examinan los efectos de diferentes estudios, por ejemplo, este.
Mucho de esto se me pasó por la cabeza, pero parece que la frecuencia de bigramas es una de las