次のアルファベット順にソートされた単語のリストを検討してください。
balderdash
ballet
balloonfish
balloonist
ballot
brooding
broom
すべての単語はで始まりb
、最初の5つはで始まりbal
ます。最初の2つの単語だけを見ると:
balderdash
ballet
代わりに書くことができます:
balderdash
+let
ここ' '
で、単語が前の単語と接頭辞文字を共有する場所で使用されます。'+'
2番目の単語が前の単語と接頭辞を共有する最後の文字を示す文字を除きます。
これは一種の「トライ」視覚化です。親は「bal
」であり、2つの子孫が'derdash'
あり'let'
ます。
次のような長いリストの場合:
balderdash
ballet
brooding
さらに、パイプ文字'|'
を使用して、次のように共有プレフィックスの末尾を明確にすることができます。
balderdash
| +let
+rooding
そして、同等の木は根のだろう'b'
2人の子供持つ:サブツリーたルート'al'
と、その2人の子供'derdash'
とを'let'
、および'rooding'
。
この戦略を元のリストに適用すると、
balderdash
ballet
balloonfish
balloonist
ballot
brooding
broom
次のような出力が得られます。
balderdash
| +let
| +oonfish
| | +ist
| +t
+rooding
+m
リスト内の2つの連続した単語に共有プレフィックスがない場合、特殊文字は置換されません。例えばリストの場合:
broom
brood
crude
crumb
出力が必要です:
broom
+d
crude
+mb
入力
入力内の単語は英数字のみで構成されます(スペースや句読点は含まれません)。これは、選択した形式を指定する限り、文字列のリスト、単一の文字列、またはその他の合理的なアプローチの形式になります。2つの連続した単語が同じになることはありません。リストはアルファベット順にソートされます。
出力
出力には、行ごとまたは合計で末尾の空白を含めることができますが、先頭の空白は含まれません。文字列のリストなども受け入れられます。
これはコードゴルフですです。各言語の最短コードは自慢する権利を保持します。抜け穴に対する通常の禁止が適用されます。
テストケース
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
+
最初の下にいると推測していますがo
、私は挑戦を書いていないので、私は確信がありません。
ball
あとに単語がある場合はどうですかballoon
。どのような出力を期待すべきですか?