Esta é uma variante de Reproduzir a cadeia de palavras e Construir uma longa cadeia de palavras .
A entrada é uma lista não vazia de palavras únicas com pelo menos 2 caracteres de comprimento em caracteres de [az]. Você precisa gerar o comprimento da cadeia mais longa possível, onde cada palavra subsequente começa com a última letra da palavra anterior. Você pode começar com qualquer palavra da lista.
Outra mudança é que você pode repetir qualquer palavra da lista. No entanto, você não pode repetir nenhum bloco de duas palavras. Por exemplo,
cat->tac->cat
é permitido, mas cat->tac->cat->tac
não é, porque você repetiu um bloco de duas palavras ( cat->tac
). Além disso, você não pode usar a mesma palavra duas vezes seguidas (por exemplo eye->eye
).
Exemplos:
cat dog tree egg
=> 3 (gato-> árvore-> ovo)new men ten whim
=> 5 (dez-> novo-> capricho-> homem-> novo)truth fret heart his
=> 5 (fret-> verdade-> coração-> verdade-> his)we were stew early yew easy
=> 9 (ensopado-> eram-> cedo-> teixo-> eram-> fácil-> teixo-> nós-> fácil)tac cat tac cot tac can
=> 6 (tac-> gato-> tac-> cot-> tac-> lata)
(Deixe-me saber se eu cometi um erro em algum desses exemplos ou se você tiver mais.)
"cat dog tred xy yz zx"
retorna4
. Isso está correto? Não deveria ser3
?xy yz zx xy
é a cadeia mais longa, portanto 4.Haskell ,
131141 bytesBasicamente, a abordagem da força bruta. A idéia é gerar todas as peças possíveis de dominó , permutá-las, verificar se é uma combinação válida e maximizar a coisa toda. A complexidade do tempo é ridícula, o quarto caso de teste já leva ~ 4s no meu PC e no TIO parece não funcionar!
Experimente online!
Ungolfed
Edit : Alterado do Lambdabot para desvendar o Haskell, mas salvou alguns bytes jogando golfe, de modo que ainda é menor que
145
bytes :)fonte