Betrachten Sie die folgende alphabetisch sortierte Liste von Wörtern:
balderdash
ballet
balloonfish
balloonist
ballot
brooding
broom
Alle Wörter beginnen mit bund die ersten 5 beginnen mit bal. Wenn wir uns nur die ersten beiden Wörter ansehen:
balderdash
ballet
wir könnten stattdessen schreiben:
balderdash
+let
wobei das verwendet ' 'wird, wenn ein Wort ein Präfixzeichen mit dem vorherigen Wort teilt; mit Ausnahme des '+'Zeichens, das das letzte Zeichen angibt, bei dem das zweite Wort ein Präfix mit dem vorherigen Wort teilt.
Dies ist eine Art "Trie" -Visualisierung: Das übergeordnete Element ist " bal" und hat 2 Nachkommen: 'derdash'und 'let'.
Mit einer längeren Liste, wie zum Beispiel:
balderdash
ballet
brooding
Wir können zusätzlich das Pipe-Zeichen verwenden '|', um zu verdeutlichen, wo das gemeinsame Präfix endet, wie folgt:
balderdash
| +let
+rooding
und der äquivalente Baum hätte eine Wurzel aus 'b'zwei Kindern: der Teilbaum hätte Wurzel 'al'und und seine zwei Kinder 'derdash'und 'let'; und 'rooding'.
Wenn wir diese Strategie auf unsere ursprüngliche Liste anwenden,
balderdash
ballet
balloonfish
balloonist
ballot
brooding
broom
Wir erhalten eine Ausgabe, die wie folgt aussieht:
balderdash
| +let
| +oonfish
| | +ist
| +t
+rooding
+m
Wenn zwei aufeinanderfolgende Wörter in der Liste kein gemeinsames Präfix haben, werden keine Sonderzeichen ersetzt. zB für die Liste:
broom
brood
crude
crumb
Wir wollen die Ausgabe:
broom
+d
crude
+mb
Eingang
Die Wörter in der Eingabe bestehen nur aus alphanumerischen Zeichen (keine Leerzeichen oder Satzzeichen). Dies kann in Form einer Liste von Zeichenfolgen, einer einzelnen Zeichenfolge oder einer anderen sinnvollen Methode erfolgen, sofern Sie das von Ihnen gewählte Format angeben. Keine zwei aufeinander folgenden Wörter werden gleich sein. Die Liste wird alphabetisch sortiert.
Ausgabe
Ihre Ausgabe kann nachgestellte Leerzeichen pro Zeile oder insgesamt enthalten, jedoch keine führenden Leerzeichen. Eine Liste von Zeichenketten oder ähnlichem wäre ebenfalls akzeptabel.
Das ist Code-Golf ; Der kürzeste Code in jeder Sprache behält sich prahlerische Rechte vor. Es gelten die üblichen Lückenverbote.
Testfälle
Input:
apogee
apology
app
apple
applique
apply
apt
Output:
apogee
|+logy
+p
|+le
| +ique
| +y
+t
Input:
balderdash
ballet
balloonfish
balloonist
ballot
brooding
broom
donald
donatella
donna
dont
dumb
Output:
balderdash
| +let
| +oonfish
| | +ist
| +t
+rooding
+m
donald
| |+tella
| +na
| +t
+umb
+unter der ersten o, aber ich habe die Herausforderung nicht geschrieben, deshalb bin ich nicht sicher.
ballnachballoon. Mit welcher Leistung sollten wir rechnen?