Introdução
Um quebra-cabeça popular é converter uma palavra em outra através de uma série de etapas que substituem apenas uma letra e que sempre resultam em uma palavra válida. Por exemplo, o BAG pode ser convertido em DOG por um caminho de cinco etapas:
SACO -> BAT -> CAT -> BOLO -> COG -> CÃO
Caminhos mais curtos também existem neste caso; por exemplo:
SACO -> BOG -> CÃO
Se alguém desenhasse um gráfico cujos vértices fossem rotulados por palavras, com uma aresta entre qualquer par de palavras que diferisse em uma letra, o caminho mais curto de "BAG" a "CÃO" consistiria em duas arestas.
Desafio
Você deve escrever um programa que receba como entrada um "dicionário" de palavras com o mesmo comprimento, representando todas as palavras permitidas que podem aparecer como etapas ao longo de um caminho. Ele deve gerar pelo menos um "caminho mais curto e mais longo", ou seja, um caminho entre duas das palavras que é:
não mais do que qualquer outro caminho entre essas duas palavras;
pelo menos enquanto o caminho mais curto possível entre qualquer outro par de palavras da lista.
No contexto do gráfico descrito acima, o comprimento desse caminho é o diâmetro do gráfico.
No caso degenerado em que nenhuma das palavras de entrada pode ser transformada em nenhuma das outras, imprima pelo menos um caminho de comprimento zero, ou seja, uma única palavra.
Exemplos
A entrada ["saco", "bastão", "gato", "berço", "ponto", "cachorro"] deve gerar um caminho que percorra todas as seis palavras nessa ordem (ou ordem reversa), já que o caminho mais curto de " saco "para" cachorro "dentro deste dicionário é o mais longo possível, cinco etapas.
A entrada ["bolsa", "bastão", "bot", "gato", "berço", "ponto", "cachorro"] deve gerar o caminho "bolsa, bastão, bot, ponto, cachorro" e / ou sua reversão.
A entrada ["code", "golf", "male", "buzz", "mole", "role", "mould", "cold", "gold", "mode"] deve gerar um caminho entre "code" e "golfe".
A entrada ["um", "dois", "seis", "dez"] corresponde a um gráfico sem arestas; portanto, imprima um ou mais caminhos de palavra única (comprimento zero).
Se a entrada contiver duas palavras com comprimento desigual, a saída será indefinida.
Regras
- Aplicam-se as regras de código padrão do golfe
- Haverá vários caminhos "mais curtos". Você deve produzir pelo menos um, mas pode liberar quantos quiser.
- Você é livre para decidir como o dicionário de entrada é passado para o seu programa.
- O código mais curto em bytes vence.
[]ou [[]])?