アナグラムを生成および操作するためのライブラリ。
セイノシットゥ | UT 張力、SIC UIS
ロバート・フック、デ・ポテンティア・レスティティバ
('[d4hines/anagramaton.core :as a] が必要です);;ライブラリには、入力として配列文字列の形式で辞書が必要です。以下に例を示します。(def Words (str/split (slurp "/usr/share/dict/words") #"n"));;次に、辞書に対して前処理を行う必要があります(def word-map (a/dict->word-map Words));;これで、アナグラムの作成を開始できます!(a/アナグラム ワードマップ "読み取り") => #{["親愛なる"] [「あえて」] ["読む"] [「あ」「赤」] ["広告" "再"]}
心理学の研究者たちは、アナグラムを解く被験者の能力を調査している。そのため、アナグラムの解決策を生成して検証する方法が必要です。
このプロジェクトの目的のために、次の定義が当てはまります。
Word: 標準 Unix 単語のセットの 1 つ。
アナグラム: 別の文字列の文字を並べ替えることによって形成される単語または一連の単語 ( carenterから形成されるrant creepなど)。
アナグラムパズル: 単語ではないがアナグラムである文字列。
アナグラム ソリューション: 指定されたアナグラムの同じ文字で構成される単語。
解決できないアナグラム: 単語でもアナグラムでもない文字列 (ちょっと誤解ですよね?)。
ソリューションは次のことを行う必要があります。
Clojure ライブラリになる...
アナグラムパズルを生成することができます。
さまざまな難易度の...
そして、指定された単語が指定されたアナグラムの解決策であることを確認します...
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 に感謝します。
アナグラム フレーズ (複数単語のアナグラム) を扱うつもりですか?
私がこれまで読んだすべての定義では、アナグラムは「単語、フレーズ、または名前」として定義されています。私は、複数の単語のアナグラムが追加する複雑さ (桁違いに) については興奮していませんが、問題に忠実であり続けるためには対処する必要があると思います。
速度を最適化するにはどうすればよいでしょうか?
できるだけ少なく。時期尚早な最適化など。
「難易度」はどうやって測るのでしょうか?
次のセクションを参照してください。
アナグラムの難易度って一体どうやって測るの?これは多くの学術研究と議論の対象であることが判明しました。
これまでの私の研究の簡単な要約は次のとおりです。
マイズナーとトレッセルトはこの問題の歴史的権威であるようで、このような多くの研究で引用されています。
彼らは、さまざまな研究の効果を調べる研究を大量に持っています。たとえば、これです。
多くのことが頭をよぎりましたが、バイグラム周波数はその 1 つであるようです。