Quando eu era mais novo, costumava jogar um jogo de palavras chamado Word chain . Foi muito simples. O primeiro jogador escolhe uma palavra; o próximo jogador diz outra palavra que começa com a mesma letra que a palavra anterior terminou. Isso continua para sempre até que alguém desista! O truque é que você não pode usar a mesma palavra duas vezes (a menos que todos tenham esquecido que a palavra foi usada!). Geralmente brincamos com um determinado tópico para dificultar as coisas. Mas agora, quero que você faça um programa para fazer isso por mim.
Desafio
Escreva um programa ou função completa para encontrar todas as cadeias de palavras mais longas possíveis usando um determinado conjunto de palavras e inicie a palavra.
Isso é código-golfe , então o código mais curto vence!
Entrada
Existem duas entradas: uma lista e uma palavra inicial. A palavra inicial não estará na lista. As entradas são todas ASCII em minúsculas e a lista não conterá palavras duplicadas.
Resultado
Todas as sequências de palavras da lista, tais como:
A palavra inicial é a primeira palavra na sequência.
Cada palavra subsequente começa com a mesma letra que a última letra da palavra anterior.
O comprimento da sequência é o maior possível .
Se houver várias seqüências mais longas, produza todas elas.
A sequência não precisa necessariamente conter todas as palavras da lista. Às vezes isso não é possível (consulte casos de teste). Novamente, nenhuma palavra pode ser usada duas vezes!
Casos de teste
In: [hello, turtle, eat, cat, people] artistic
Out: [artistic, cat, turtle, eat]
In: [lemonade, meatball, egg, grape] ham
Out: [ham, meatball, lemonade, egg, grape]
In: [cat, cute, ewok] attic
Out: [attic, cute, ewok]
In:[cat, cute, ewok, kilo, to, otter] attic
Out: [attic, cute, ewok, kilo, otter]
In:[cat, today, yoda, attic] ferret
Out: [ferret, today, yoda, attic, cat]
In: [cancel, loitering, gnocchi, improv, vivic, child, despair, rat, tragic, chimney, rex, xylophone] attic
Out: [[attic, child, despair, rat, tragic, cancel, loitering, gnocchi, improv, vivic, chimney], [attic, cancel, loitering, gnocchi, improv, vivic, child, despair, ra', tragic, chimney]]
In: [cat, today, yoda, artistic, cute, ewok, kilo, to, otter] attic
Out: [attic, cat, today, yoda, artistic, cute, ewok, kilo, otter]
Respostas:
Pitão,
2523 bytesSuíte de teste
Uma solução de força bruta. Muito lento para alguns dos casos de teste maiores.
Entrada no formulário:
Saída no formulário:
Explicação:
fonte
JavaScript (ES6), 164 bytes
Explicação
Uma função recursiva que verifica quanto tempo a lista de saída dura para todas as opções possíveis.
Retorna uma matriz de matrizes de palavras.
Teste
Parâmetro padrão não usado no teste para torná-lo mais compatível com vários navegadores.
Mostrar snippet de código
fonte
o[r.length]?
vez deo.length>r.length?
.o[r.length]
dica! Eu não sei como eu poderia usarpop
.Python, 104
Eu acho que deveria funcionar agora ...
Experimente online .
fonte
Perl 5, 275 bytes
Provavelmente não jogou golfe tanto quanto pode ser, mas, ei, de qualquer maneira, não é vencedor, certo?
Use-o assim:
Atenção! O uso desse script em uma lista longa requer muita memória! Funcionou muito bem para mim nos sete (seis mais o extra), mas não nos treze (doze mais um).
Ele remove a entrada final, gera uma matriz de arrayrefs, onde os arrayrefs são todas as permutações e adiciona a palavra inicial novamente no início. Em seguida, empurra cada uma dessas permutações para outra matrizref, que é o valor de um hash com a chave da quantidade da matriz que possui a propriedade de encadeamento desejada. Em seguida, encontra o máximo dessa chave e imprime todas as matrizes.
fonte
C, 373 bytes
Eu acredito que provavelmente há muito mais golfe que eu poderia fazer aqui, então provavelmente o atualizarei.
De-golfe
Link Ideone - Se eu não fiz isso direito, avise-me: D
fonte