Siehe auch: Granma liebt Ana
Sie erhalten eine Folge von ASCII-Kleinbuchstaben. Mit dieser Wörterbuchdatei (UPDATED) müssen Sie das Anagramm lösen. Um ein Anagramm zu lösen, müssen Sie alle Wörter oder Wortgruppen, die mit jedem Buchstaben aus der Eingabezeichenfolge gebildet werden können, genau einmal ausgeben, getrennt durch Zeilenumbrüche. Gruppen derselben Wörter in einer anderen Reihenfolge sind nicht eindeutig und sollten nicht separat ausgegeben werden. Die Reihenfolge der Wörter spielt jedoch keine Rolle . Die Reihenfolge der Ausgabelösungen spielt ebenfalls keine Rolle . Wenn die Eingabe kein Wort bilden kann, geben Sie nichts aus.
Einige nützliche Testfälle:
Input: viinlg
Output: living
Input: fceodglo
Output: code golf
Input: flogflog
Output: golf golf
Input: ahwhygi
Output: highway
high way
Input: bbbbbb
Output:
Regeln / Vorbehalte:
Sie können auf die Wörterbuchliste zugreifen, wie Sie möchten. Befehlszeilenargument, stdin, Lesen aus einer Datei oder Lesen aus dem Internet sind zulässig.
Die Eingabe besteht nur aus ASCII-Kleinbuchstaben. In bestimmten Fällen müssen Sie keine Ergebnisse ausgeben.
Sie erhalten keine Zeichenfolge, die bereits ein gültiges Wort bildet (möglicherweise erhalten Sie jedoch eine Zeichenfolge, die mehrere Wörter bildet , z. B.
bluehouse
).Nachgestellte Zeilenumbrüche sind zulässig, aber nicht erforderlich.
Es gelten Standardlücken.
Das ist Code-Golf . Der kürzeste Code in Bytes gewinnt. Viel Glück!
quelle
Antworten:
Python 2 ,
341327337320 BytesDiese Lösung setzt voraus, dass das Wörterbuch in einer Variablen
w
als Satz von Zeichenfolgen gespeichert ist . Der erste Satz voncombinations
muss nicht verwendet werdencombinations_with_replacement
, aber der letztere spart Bytes.Probieren Sie es online aus!
Eingabe - Anagrammiertes Wort, gefolgt vom Wörterbuch der Wörter als Satz:
Bearbeiten: Eingaben aktualisiert.
quelle
Python 3 ,
248202 BytesProbieren Sie es online aus!
Die Eingabe ist wie folgt:
Beschleunigen:
Wenn Sie zu Testzwecken von
I,*S=iter(input,'')
zu wechseln ,I=input();S=set(iter(input,''))
wird die Laufzeit drastisch reduziert und die Ausgabe bleibt gleich.Erläuterung:
Bei jeder Permutation der Eingabe wird versucht, die Permutation an allen möglichen Stellen rekursiv aufzuteilen, beginnend von links nach rechts, ohne Buchstaben zu überspringen, mit Wörtern, die sich im Wörterbuch befinden. Wenn eine geteilte Kombination mit der gesamten Eingabepermutation übereinstimmt, werden die geteilten Wörter sortiert und zu einer hinzugefügt,
set
die am und der Auswertung gedruckt wird.quelle
Javascript,
139137129 Bytes-2 Bytes dank @FelipeNardiBatista
-8 Bytes dank Lesen der Dokumente;)
Nimmt das Wörterbuch als Eingabe in Form eines Arrays von Zeichenfolgen auf.
Erläuterung:
Überprüfen Sie für jedes Wort im Wörterbuch, ob jeder Buchstabe im ausgewählten Wort enthalten ist, und entfernen Sie es gleichzeitig aus dem Wort. Stellen Sie am Ende jedes Wörterbucheintrags den unveränderten Zustand des Wortes wieder her, um nach weiteren Übereinstimmungen zu suchen.
quelle