Dado um arquivo de dicionário (um arquivo de texto contendo uma palavra ou frase em cada linha, com pontuação possível, mas sem números; as linhas são alfabetizadas), você deve exibir cada combinação de palavras em que uma letra pode ser removida de uma palavra para formar outra; a letra removida deve estar entre parênteses.
Por exemplo, a entrada
cat
cart
code
golf
ode
verify
versify
deve dar uma saída de
ca(r)t
(c)ode
ver(s)ify
Várias maneiras de obter o mesmo par devem ser exibidas apenas uma vez. Você pode produzir scra(p)ped
ou scrap(p)ed
, mas não ambos.
A saída deve ser ordenada alfabeticamente pela entrada mais longa;
mart
mar
mat
ma
deve ter uma saída de
ma(r)
ma(t)
ma(r)t
mar(t)
e os dois últimos podem estar em qualquer ordem.
O arquivo do dicionário pode incluir letras maiúsculas, espaços, hífens ou apóstrofos; estes devem ser ignorados. Por exemplo,
inlay
in-play
deve produzir in(p)lay
. Sua saída deve estar no mesmo caso. Espaço em branco extra é permitido.
A entrada pode ser STDIN ou de um arquivo; é separado por novas linhas. A saída pode ser o valor de retorno de uma função ou STDOUT (ou gravada em um arquivo, se você desejar).
Isso é código-golfe , então o código mais curto em bytes vence.
(Este é o meu primeiro desafio no PPCG - deixe-me saber se fiz algo errado e vou consertar.)
mart mar mat ma
? Seriamar(t) ma(r)t ma(r) ma(t)
?