철자 바꾸기를 생성하고 조작하기 위한 라이브러리입니다.
CEIINOSSITTUU | UT 텐시오, SIC UIS
로버트 훅, De Potentia Restitutiva
('[d4hines/anagramaton.core :as a] 필요);; 라이브러리에는 배열 문자열 형식의 입력으로 사전이 필요합니다. 여기에 예가 있습니다.(def Words (str/split (slurp "/usr/share/dict/words") #"n"));; 다음으로 사전에서 몇 가지 전처리를 수행해야 합니다(def word-map (a/dict->word-mapwords));; 이제 철자 바꾸기를 시작할 수 있습니다!(a/anagrams word-map "read") => #{["친애하는"] ["도전"] ["읽다"] ["A" "빨간색"] ["광고" "다시"]}
심리학 연구자들은 철자법을 풀 수 있는 피험자의 능력을 조사하고 있습니다. 따라서 철자 바꾸기에 대한 솔루션을 생성하고 검증하는 방법이 필요합니다.
이 프로젝트의 목적에 따라 다음 정의를 유지합니다.
Word: 표준 Unix 단어 집합 중 하나입니다.
철자 바꾸기: carpenter 에서 형성된 rant creep 와 같이 다른 문자열의 문자를 재배열하여 형성된 단어 또는 단어 시퀀스입니다.
철자 바꾸기 퍼즐: 단어가 아닌 철자법인 문자열입니다.
철자 바꾸기 솔루션: 주어진 철자 바꾸기와 동일한 문자로 구성된 단어입니다.
풀 수 없는 철자 바꾸기: 단어도 철자 바꾸기도 아닌 문자열(조금 잘못된 이름이죠?)
솔루션은 다음을 충족해야 합니다.
클로저 도서관이 되어라...
철자법 퍼즐을 생성할 수 있습니다..
다양한 난이도로...
그리고 주어진 단어가 주어진 철자 바꾸기에 대한 답인지 확인하십시오.
REPL에서 대화식으로 사용할 수 있을 만큼 빠릅니다.
Wordsmith의 서비스는 멋진 철자법을 만들기 위해 돌릴 수 있는 수많은 손잡이를 자랑합니다. 이건 정말 대단해요. 그래서 API용 클라이언트 라이브러리를 만들고 끝내고 싶은 유혹을 느꼈습니다...
https://en.wikipedia.org/wiki/Scrabble_letter_distributions 누가 생각이나 했을까요?
http://norvig.com/mayzner.html - 정말 좋은 설명, 바이그램 테이블 업데이트 https://stackoverflow.com/a/12477976 - 단일 단어 철자 바꾸기를 찾는 기본 알고리즘 http://pi.math.cornell.edu /~mec/2003-2004/cryptography/subs/digraphs.html - 사용 중인 Bigram 테이블 https://web.stanford.edu/class/cs9/sample_probs/Anagrams.pdf - 알고리즘에 대한 좋은 설명 http://www.ssynth.co.uk/~gay/anagabout.html - 구현이지만 세부 사항이 조악함
https://stackoverflow.com/a/881367 - 영감
부분 철자법 알고리즘에 도움을 주신 @seancorfield, @dpsutton 및 @porkostomus에게 감사드립니다!
철자 바꾸기 구문(다중 단어 철자 바꾸기)을 다룰 예정인가요?
지금까지 내가 읽은 모든 정의는 철자 바꾸기를 "단어, 문구 또는 이름"으로 정의합니다. 여러 단어로 구성된 철자 바꾸기가 추가하는 복잡성(수십 배 이상)에 대해서는 별로 흥미롭지 않지만 문제에 충실하려면 이를 처리해야 한다고 생각합니다.
속도를 최적화하기 위해 무엇을 할 것인가?
가능한 한 적게. 조기 최적화와 그 모든 것.
"어려움"을 어떻게 측정할 것인가?
다음 섹션을 참조하세요.
애너그램 난이도를 도대체 어떻게 측정하나요? 이는 많은 학문적 연구와 논쟁의 주제임이 밝혀졌습니다.
지금까지의 연구에 대한 빠르고 더러운 요약은 다음과 같습니다.
Mayzner와 Tresselt는 이 문제에 대한 역사적인 권위자로 보이며 이와 같은 많은 연구에서 인용되었습니다.
그들은 다양한 연구의 효과를 조사하는 수많은 연구를 가지고 있습니다(예: 이 연구).
이것에 대한 많은 생각이 내 머릿속에 맴돌았지만 바이그램 빈도는 다음 중 하나인 것 같습니다.