어렸을 때 Word Chain 이라는 단어 게임을 합니다. 매우 간단했습니다. 첫 번째 플레이어는 단어를 선택합니다. 다음 플레이어는 이전 단어와 같은 문자로 시작하는 다른 단어를 말합니다. 누군가 포기할 때까지 이것은 영원히 계속됩니다! 속임수는 같은 단어를 두 번 사용할 수 없다는 것입니다. 일반적으로 특정 주제를 다루기 어렵게 만듭니다. 그러나 지금, 당신이 나를 위해 이것을 할 수있는 프로그램을 만들고 싶습니다.
도전
주어진 단어 세트와 시작 단어를 사용하여 가능한 가장 긴 단어 체인을 찾기위한 전체 프로그램 또는 함수를 작성하십시오.
이것은 code-golf 이므로 가장 짧은 코드가 승리합니다!
입력
목록과 시작 단어의 두 가지 입력이 있습니다. 시작 단어는 목록에 없습니다. 입력은 모두 소문자 ASCII이며 목록에는 중복 단어가 포함되지 않습니다.
산출
목록에서 다음과 같은 모든 단어 순서 :
시작 단어는 시퀀스에서 첫 번째 단어입니다.
각 후속 단어는 이전 단어의 마지막 문자와 동일한 문자로 시작합니다.
시퀀스의 길이가 가장 깁니다 .
가장 긴 시퀀스가 여러 개 있으면 모두 출력합니다.
시퀀스가 반드시 모든 목록 단어를 포함 할 필요는 없습니다. 때로는 불가능합니다 (테스트 사례 참조). 다시 말하지만, 어떤 단어도 두 번 사용할 수 없습니다!
테스트 케이스
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]