Это вариант Воспроизвести цепочку слов и Построить длинную цепочку слов .
Входные данные представляют собой непустой список уникальных слов длиной не менее 2 символов, состоящих из символов в [az]. Вам необходимо вывести длину максимально длинной цепочки, где каждое последующее слово начинается с последней буквы предыдущего слова. Вы можете начать с любого слова в списке.
Другой поворот заключается в том, что вам разрешено повторять любое слово в списке. Тем не менее, вы не можете повторить любой блок из двух слов. Например,
cat->tac->cat
разрешено, но cat->tac->cat->tac
нет, потому что вы повторили блок из двух слов ( cat->tac
). Также нельзя использовать одно и то же слово дважды подряд (например eye->eye
).
Примеры:
cat dog tree egg
=> 3 (кошка-> дерево-> яйцо)new men ten whim
=> 5 (десять-> новые-> капризы-> мужчины-> новые)truth fret heart his
=> 5 (раздражение-> правда-> сердце-> правда-> его)we were stew early yew easy
=> 9 (рагу-> были-> рано-> тис-> были-> легко-> тис-> мы-> легко)tac cat tac cot tac can
=> 6 (tac-> cat-> tac-> cot-> tac-> can)
(Дайте мне знать, если я допустил ошибку в каком-либо из этих примеров или если вы придумали больше.)
"cat dog tred xy yz zx"
возвращается4
. Это верно? Не должно ли это быть3
?xy yz zx xy
- самая длинная цепочка, поэтому 4.Haskell ,
131141 байтВ основном подход грубой силы. Идея состоит в том, чтобы генерировать все возможные фигуры домино , переставлять их, проверять, является ли это действительным комбо, и максимизировать все это. Сложность времени смешная, 4-й тестовый пример уже занимает ~ 4 с на моем ПК, а на TIO он не работает!
Попробуйте онлайн!
Ungolfed
Изменить : Изменено с Lambdabot на голый Haskell, но сэкономил несколько байтов, играя в гольф, так что это все еще меньше, чем
145
байты :)источник