Рассмотрим следующий отсортированный по алфавиту список слов:
balderdash
ballet
balloonfish
balloonist
ballot
brooding
broom
Все слова начинаются с b
, а первые 5 начинаются с bal
. Если мы просто посмотрим на первые 2 слова:
balderdash
ballet
мы могли бы написать вместо этого:
balderdash
+let
где ' '
используется, когда слово разделяет префиксный символ с предыдущим словом; за исключением '+'
символа, который указывает последний символ, где второе слово имеет префикс с предыдущим словом.
Это своего рода визуализация "trie" : родительский объект имеет ' bal
' и имеет 2 потомка: 'derdash'
и 'let'
.
С более длинным списком, таким как:
balderdash
ballet
brooding
мы можем дополнительно использовать символ канала, '|'
чтобы прояснить, где заканчивается общий префикс, следующим образом:
balderdash
| +let
+rooding
и эквивалентное дерево будет иметь корень, 'b'
имеющий два дочерних элемента : поддерево, имеющее корень, 'al'
и его два дочерних элемента 'derdash'
и 'let'
; и 'rooding'
.
Если мы применим эту стратегию к нашему первоначальному списку,
balderdash
ballet
balloonfish
balloonist
ballot
brooding
broom
мы получаем вывод, который выглядит так:
balderdash
| +let
| +oonfish
| | +ist
| +t
+rooding
+m
Если два последовательных слова в списке не имеют общего префикса, никакие специальные символы не подставляются; например, для списка:
broom
brood
crude
crumb
мы хотим вывод:
broom
+d
crude
+mb
вход
Слова на входе будут состоять только из буквенно-цифровых символов (без пробелов и знаков препинания); это может быть в форме списка строк, отдельной строки или любого другого разумного подхода, если вы указываете выбранный вами формат. Два последовательных слова не будут одинаковыми. Список будет отсортирован по алфавиту.
Выход
Ваш вывод может содержать конечные пробелы в строке или в целом, но без начальных пробелов. Список строк или аналогичных также будет приемлемым.
Это код-гольф ; самый короткий код на каждом языке сохраняет права хвастовства. Обычные запреты против лазеек применяются.
Тестовые случаи
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
. Какой выход мы должны ожидать?