Considere a seguinte lista de palavras classificadas em ordem alfabética:
balderdash
ballet
balloonfish
balloonist
ballot
brooding
broom
Todas as palavras começam com b, e as 5 primeiras começam com bal. Se apenas olharmos para as 2 primeiras palavras:
balderdash
ballet
nós poderíamos escrever:
balderdash
+let
onde ' 'é usado onde uma palavra compartilha um caractere de prefixo com a palavra anterior; exceto o '+'caractere que indica o ÚLTIMO caractere em que a segunda palavra compartilha um prefixo com a palavra anterior.
Esta é uma espécie de visualização 'trie' : o pai é ' bal' e tem 2 descendentes: 'derdash'e 'let'.
Com uma lista mais longa, como:
balderdash
ballet
brooding
além disso, podemos usar o caractere de barra vertical '|'para deixar mais claro onde o prefixo compartilhado termina, da seguinte maneira:
balderdash
| +let
+rooding
e a árvore equivalente teria a raiz de 'b'ter dois filhos: a subárvore com raiz ee 'al'seus dois filhos 'derdash'e 'let'; e 'rooding'.
Se aplicarmos essa estratégia à nossa lista original,
balderdash
ballet
balloonfish
balloonist
ballot
brooding
broom
obtemos resultados parecidos com:
balderdash
| +let
| +oonfish
| | +ist
| +t
+rooding
+m
Se duas palavras consecutivas na lista não tiverem prefixo compartilhado, nenhum caractere especial será substituído; por exemplo, para a lista:
broom
brood
crude
crumb
queremos a saída:
broom
+d
crude
+mb
Entrada
As palavras na entrada serão compostas apenas por alfanuméricos (sem espaços ou pontuação); isso pode estar na forma de uma lista de strings, uma única string ou qualquer outra abordagem razoável, desde que você especifique o formato escolhido. Não há duas palavras consecutivas iguais. A lista será classificada em ordem alfabética.
Saída
Sua saída pode conter espaços em branco à direita por linha ou no total, mas nenhum espaço em branco à esquerda. Uma lista de strings ou similar também seria aceitável.
Isso é código-golfe ; o código mais curto em cada idioma mantém os direitos de se gabar. Aplicam-se as proibições usuais contra brechas.
Casos de teste
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
+menos do que o primeiro o, mas não escrevi o desafio, então não tenho certeza.
balldepoisballoon. Que saída devemos esperar?