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.
ball
depoisballoon
. Que saída devemos esperar?