Hier ist einer für alle, die Sie da draußen Wortschmiede! Schreiben Sie ein Programm oder eine Funktion, die eine Liste von Wörtern und eine Liste aller möglichen verketteten Zerlegungen für jedes Wort erstellt. Beispielsweise:
(Hinweis: Dies ist nur eine kleine Auswahl zur Veranschaulichung. Die tatsächliche Ausgabe ist weitaus umfangreicher.)
afterglow = after + glow
afterglow = aft + erg + low
alienation = a + lie + nation
alienation = a + lien + at + i + on
alienation = a + lien + at + ion
alienation = alien + at + i + on
alienation = alien + at + ion
archer = arc + her
assassinate = ass + as + sin + ate
assassinate = ass + ass + in + ate
assassinate = assassin + ate
backpedalled = back + pedal + led
backpedalled = back + pedalled
backpedalled = backpedal + led
goatskin = go + at + skin
goatskin = goat + skin
goatskin = goats + kin
hospitable = ho + spit + able
temporally = tempo + rally
windowed = win + do + wed
windowed = wind + owed
weatherproof = we + at + her + pro + of
yeasty = ye + a + sty
Ok, du kommst auf die Idee. :-)
Regeln
- Verwenden Sie eine Programmiersprache Ihrer Wahl. Kürzester Code nach Zeichenanzahl für jede Sprache gewinnt. Dies bedeutet, dass es für jede verwendete Sprache einen Gewinner gibt. Der Gesamtsieger ist einfach der kürzeste der eingereichten Codes.
- Die Eingabeliste kann eine Textdatei, eine Standardeingabe oder eine von Ihrer Sprache bereitgestellte Listenstruktur (Liste, Array, Wörterbuch, Gruppe usw.) sein. Die Wörter können Englisch oder eine andere natürliche Sprache sein. (Wenn es sich bei der Liste um englische Wörter handelt, sollten Sie Einträge mit einem Buchstaben außer "a" und "i" ignorieren oder herausfiltern. Ebenso sollten Sie in anderen Sprachen unsinnige Einträge ignorieren, wenn sie vorhanden sind erscheinen in der Datei.)
- Die Ausgabeliste kann eine Textdatei, eine Standardausgabe oder eine von Ihrer Sprache verwendete Listenstruktur sein.
- Sie können ein beliebiges Eingabewörterbuch verwenden, aber wahrscheinlich möchten Sie eines verwenden, das vernünftige Wörter enthält, anstatt eines, das zu viele dunkle, arkane oder unbewusste Wörter enthält. Dies ist die Datei, die ich verwendet habe: Die Maiskolben-Liste mit mehr als 58000 englischen Wörtern
Fragen
Bei dieser Herausforderung geht es in erster Linie darum, den Code zu schreiben , um die Aufgabe zu erfüllen, aber es macht auch Spaß, die Ergebnisse durchzukämmen ...
- Welche Unterwörter kommen am häufigsten vor?
- Welches Wort kann in die meisten Unterwörter zerlegt werden?
- Welches Wort kann auf die unterschiedlichsten Arten zerlegt werden?
- Welche Wörter setzen sich aus den größten Unterwörtern zusammen?
- Welche Zerlegungen fanden Sie am amüsantesten?
code-golf
string
natural-language
Todd Lehman
quelle
quelle
alienation
als ich das ausgeschnitten und eingefügt habe. Jetzt behoben. In Bezug auf die anderen ist die obige Liste nur eine kleine Auswahl. Mein Testprogramm ergab Zehntausende von Antworten, als ich die Corncob-Liste erhielt.Antworten:
Python 186
Nicht besonders effizient, aber eigentlich nicht schrecklich langsam. Es ist nur naiv (ich nehme an, es ist möglich, obwohl ich es für unwahrscheinlich halte, dass Python einige clevere Optimierungen vornimmt), überprüft, ob Unterwörter im Maiskolbenwörterbuch enthalten sind, und findet rekursiv so viele Wörter wie möglich. Natürlich ist dieses Wörterbuch ziemlich umfangreich und Sie können eines ausprobieren, das keine verschiedenen Abkürzungen und Akronyme enthält (was zu Dingen wie führt
bedridden: be dr id den
). Auch das verknüpfte Wörterbuch schien kein "A" oder "I" als Wörter zu haben, so dass ich sie manuell hinzufügte.Bearbeiten:
Jetzt ist die erste Eingabe der Dateiname des zu verwendenden Wörterbuchs, und jede weitere Eingabe ist ein Wort.
quelle
print f
sein sollteprint(f)
echo archer|python2 filename.py
gibt einen EOFError für die letzte Zeile ausfor f in W(raw_input()):print f
=>''.join(W(raw_input())
;a=open('c').read().split('\n')
=>a=open('c').readlines()
readlines
die Zeilenumbrüche bleiben am Ende der Zeilen, weshalb ich es so gemacht habe, wie ich es getan habe.join
müssen alle Elemente Zeichenfolgen sein, und ich kann sie nicht in einer kleineren Form erhalten, als ich sie bereits habe.Cobra - 160
Dies ist eine Funktion (eine Art von zwei Funktionen), die a übernimmt
List<of String>
* und die Zeichenfolgen ausgibt, die die möglichen Unterwortanordnungen für jede Zeichenfolge in der Argumentliste enthalten.* der Typ ist tatsächlich
List<of dynamic?>
, aber wenn Sie etwas anderes angeben,List<of String>
wird es wahrscheinlich nicht funktionieren.quelle
Scala,
132,129Edit: etwas kürzer als eine Schleife, die von stdin liest als eine Funktion
Rennen wie
(oder benutze eine längere Wortliste :))
Original:
Funktion von Seq [String] bis Seq [Seq [List [String]]]. Nimmt das Wörterbuch als Befehlszeilenargument.
Ungolfed:
Ansatz ist es, alle möglichen Listen von Teilzeichenfolgen zu generieren und diejenigen herauszufiltern, die eine Zeichenfolge enthalten, die nicht im Wörterbuch enthalten ist. Beachten Sie, dass einige der generierten Teilzeichenfolgen eine zusätzliche leere Zeichenfolge enthalten. Ich gehe davon aus, dass die leere Zeichenfolge nicht im Wörterbuch enthalten ist (es gibt sowieso keine Möglichkeit, sie in der Befehlszeile weiterzugeben).
quelle