Eine Bibliothek zum Generieren und Bearbeiten von Anagrammen.
CEIINOSSITTUU | UT TENSIO, SIC UIS
Robert Hooke, De Potentia Restitutiva
(erfordern '[d4hines/anagramaton.core :as a]);; Die Bibliothek benötigt als Eingabe ein Wörterbuch in Form eines Array-Strings. Hier ist ein Beispiel.(def Words (str/split (slurp "/usr/share/dict/words") #"n");; Als nächstes müssen wir einige Vorverarbeitungen am Wörterbuch durchführen(def word-map (a/dict->word-map Words));; Jetzt können Sie mit der Bildung von Anagrammen beginnen! (a/anagrams word-map „read“) => #{["Sehr geehrte Damen und Herren"] ["Wagen"] ["Lesen"] [„A“ „Rot“] [„Anzeige“ „Re“]}
Psychologieforscher untersuchen die Fähigkeit von Probanden, Anagramme zu lösen. Daher benötigen sie eine Möglichkeit, die Lösung für Anagramme zu generieren und zu überprüfen.
Für die Zwecke dieses Projekts gelten folgende Definitionen:
Wort: Eines der Standard-Unix-Wörter.
Anagramm: ein Wort oder eine Folge von Wörtern, die durch Neuanordnung der Buchstaben einer anderen Zeichenfolge gebildet werden, z. B. „Rant Creep“ , gebildet aus „Carpenter“ .
Anagramm-Puzzle: eine Zeichenfolge, die kein Wort, sondern ein Anagramm ist.
Anagrammlösung: ein Wort, das aus den gleichen Buchstaben eines bestimmten Anagramms besteht.
Unlösbares Anagramm: eine Zeichenfolge, die weder ein Wort noch ein Anagramm ist (etwas irreführende Bezeichnung, oder?).
Die Lösung muss:
Seien Sie eine Clojure-Bibliothek ...
Das kann zu Anagramm-Rätseln führen.
Von unterschiedlichem Schwierigkeitsgrad...
Und stellen Sie sicher, dass ein bestimmtes Wort die Lösung für ein bestimmtes Anagramm ist ...
Dabei ist es schnell genug, um es im REPL interaktiv nutzen zu können.
Der Service von Wordsmith verfügt über eine beeindruckende Anzahl an Knöpfen, an denen Sie drehen können, um tolle Anagramme zu erstellen. Dieses Ding ist großartig. Ich bin so versucht, einfach eine Client-Bibliothek für ihre API zu erstellen und fertig ...
https://en.wikipedia.org/wiki/Scrabble_letter_distributions Wer hätte das jemals gedacht
http://norvig.com/mayzner.html – Wirklich gute Erklärungen, Aktualisierungen von Bigrammtabellen https://stackoverflow.com/a/12477976 – grundlegender Algorithmus zum Finden von Einzelwort-Anagrammen http://pi.math.cornell.edu /~mec/2003-2004/cryptography/subs/digraphs.html – Bigram-Tabelle, die ich verwende https://web.stanford.edu/class/cs9/sample_probs/Anagrams.pdf – gute Erklärung des Algorithmus http://www.ssynth.co.uk/~gay/anagabout.html – Implementierung, aber mit schäbigen Details
https://stackoverflow.com/a/881367 – Inspiration
Vielen Dank an @seancorfield, @dpsutton und @porkostomus für die Hilfe beim partiellen Anagramm-Algorithmus!
Werden wir es mit Anagrammphrasen (Mehrwort-Anagrammen) zu tun haben?
Jede Definition, die ich bisher gelesen habe, definiert ein Anagramm als „Wort, Phrase oder Name“. Ich bin zwar nicht begeistert von der zusätzlichen Komplexität, die Mehrwort-Anagramme mit sich bringen (um Größenordnungen mehr), aber ich denke, sie müssen gehandhabt werden, um dem Problem treu zu bleiben.
Was werden wir tun, um die Geschwindigkeit zu optimieren?
So wenig wie möglich. Vorzeitige Optimierung und so.
Wie messen wir „Schwierigkeit“?
Siehe nächsten Abschnitt.
Wie zum Teufel misst man den Schwierigkeitsgrad eines Anagramms? Es stellt sich heraus, dass dies Gegenstand zahlreicher akademischer Forschung und Debatte ist.
Hier ist die schnelle und schmutzige Zusammenfassung meiner bisherigen Recherchen:
Mayzner und Tresselt scheinen die historischen Autoritäten in dieser Angelegenheit zu sein und werden in vielen Studien wie dieser zitiert.
Sie haben eine Menge Studien, die die Auswirkungen verschiedener Studien untersuchen, z. B. diese.
Vieles davon ging mir über den Kopf, aber es scheint, dass die Bigramm-Frequenz eine davon ist