Библиотека для создания анаграмм и управления ими.
ЦЕЙИНОССИТТУУ | UT TENSIO, SIC UIS
Роберт Гук, De Potentia Restitutiva
(требуется '[d4hines/anagramaton.core :as a]);; Библиотека требует словарь в качестве входных данных в виде строк массива. Вот пример.(defwords (str/split (slurp "/usr/share/dict/words") #"n");; Далее нам нужно выполнить предварительную обработку словаря(def word-map (a/dict->word-mapwords));; Теперь вы можете начать составлять анаграммы! (карта слов a/anagrams «читать») => #{["Дорогой"] ["Действие"] ["Читать"] ["А" "Красный"] ["Реклама" "Ре"]}
Исследователи-психологи изучают способность испытуемых решать анаграммы. Таким образом, им нужен способ генерации и проверки решения анаграмм.
Для целей данного проекта пусть справедливы следующие определения:
Слово: одно из набора стандартных слов Unix.
Анаграмма: слово или последовательность слов, образованная перестановкой букв другой строки, например rant Creep , образованная от carpenter .
Головоломка с анаграммами: строка, которая не является словом, а является анаграммой.
Решение анаграммы: слово, составленное из одинаковых букв данной анаграммы.
Неразрешимая анаграмма: строка, которая не является ни словом, ни анаграммой (немного неправильное название, а?).
Решение должно:
Быть библиотекой 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 — таблица биграмм, которую я использую 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 за помощь с алгоритмом частичной анаграммы!
Будем ли мы иметь дело с анаграммными фразами (многословными анаграммами)?
Каждое определение, которое я читал до сих пор, определяет анаграмму как «слово, фразу или имя». Хотя я не в восторге от дополнительной сложности, которую добавят анаграммы из нескольких слов (на несколько порядков), я думаю, что с ними нужно обращаться, чтобы оставаться верными проблеме.
Что мы собираемся сделать для оптимизации скорости?
Как можно меньше. Преждевременная оптимизация и все такое.
Как мы будем измерять «сложность»?
См. следующий раздел.
Как, черт возьми, вы измеряете сложность анаграммы? Оказывается, это предмет многих научных исследований и дискуссий.
Вот краткое и грязное резюме моих исследований на данный момент:
Майзнер и Трессельт, похоже, являются историческими авторитетами в этом вопросе, и на них цитируются многие исследования, подобные этому.
У них есть масса исследований, в которых изучаются эффекты различных исследований, например этого.
Многое из этого ушло у меня в голове, но кажется, что частота биграмм — одна из