Uma biblioteca para gerar e manipular anagramas.
CEIINOSSITTUU | UT TENSIO, SIC UIS
Robert Hooke, De Potentia Restitutiva
(requer '[d4hines/anagramaton.core :as a]);; A biblioteca requer um dicionário como entrada, na forma de uma matriz de strings. Aqui está um exemplo.(def palavras (str/split (slurp "/usr/share/dict/words") #"n")); Em seguida, precisamos fazer algum pré-processamento no dicionário(def word-map (a/dict->word-map words));; Agora você pode começar a formar anagramas!(um mapa de palavras de anagramas "ler") => #{["Querido"] ["Ousar"] ["Ler"] ["A" "Vermelho"] ["Anúncio" "Re"]}
Pesquisadores de psicologia estão investigando a capacidade dos sujeitos de resolver anagramas. Como tal, eles precisam de uma forma de gerar e verificar a solução para anagramas.
Para os fins deste projeto, deixe as seguintes definições valerem:
Palavra: Um dos conjuntos de palavras padrão do Unix.
Anagrama: palavra ou sequência de palavras formada pela reorganização das letras de outra sequência, como rant creep , formada a partir de carpenter .
Anagram Puzzle: uma string que não é uma palavra, mas um anagrama.
Solução de Anagrama: uma palavra composta pelas mesmas letras de um determinado anagrama.
Anagrama insolúvel: uma string que não é nem uma palavra nem um anagrama (um pouco impróprio, hein?).
A solução deve:
Seja uma biblioteca clojure...
Isso pode gerar quebra-cabeças de anagramas.
De dificuldade variada...
E verifique se uma determinada palavra é a solução de um determinado anagrama...
Embora seja rápido o suficiente para ser usado de forma interativa no REPL.
O serviço do Wordsmith apresenta um número impressionante de botões que você pode girar para criar ótimos anagramas. Essa coisa é incrível. Estou tão tentado a criar uma biblioteca cliente para sua API e pronto ...
https://en.wikipedia.org/wiki/Scrabble_letter_distributions Quem poderia imaginar
http://norvig.com/mayzner.html - Explicações realmente boas, atualizações para tabelas de bigramas https://stackoverflow.com/a/12477976 - algoritmo básico para encontrar anagramas de uma única palavra http://pi.math.cornell.edu /~mec/2003-2004/cryptography/subs/digraphs.html - Tabela Bigram que estou usando https://web.stanford.edu/class/cs9/sample_probs/Anagrams.pdf - boa explicação do algoritmo http://www.ssynth.co.uk/~gay/anagabout.html - implementação, mas com detalhes de má qualidade
https://stackoverflow.com/a/881367 - inspiração
Obrigado a @seancorfield, @dpsutton e @porkostomus pela ajuda com o algoritmo de anagrama parcial!
Vamos tratar de frases de anagramas (anagramas multipalavras)?
Todas as definições que li até agora definem um anagrama como uma "palavra, frase ou nome". Embora eu não esteja animado com a complexidade adicional que os anagramas de várias palavras irão adicionar (ordens de magnitude a mais), acho que eles precisam ser tratados para permanecerem fiéis ao problema.
O que vamos fazer para otimizar a velocidade?
O mínimo possível. Otimização prematura e tudo mais.
Como vamos medir a “dificuldade”?
Veja a próxima seção.
Como diabos você mede a dificuldade do anagrama? Acontece que este é um assunto de muita pesquisa e debate acadêmico.
Aqui está o resumo rápido e sujo da minha pesquisa até agora:
Mayzner e Tresselt parecem ser as autoridades históricas no assunto e são citados por muitos estudos como este.
Eles têm muitos estudos que examinam os efeitos de diferentes estudos, por exemplo, este.
Muito disso passou pela minha cabeça, mas parece que a frequência do bigrama é uma das