Wprowadzenie
Popularną łamigłówką jest konwertowanie jednego słowa na drugie za pomocą serii kroków, które zastępują tylko jedną literę i które zawsze skutkują poprawnym słowem. Na przykład BAG można przekonwertować na DOG za pomocą ścieżki pięciu kroków:
TORBA -> BAT -> KOT -> COT -> COG -> DOG
W tym przypadku istnieją również krótsze ścieżki; na przykład:
TORBA -> BOG -> DOG
Gdyby narysować wykres, którego wierzchołki były oznaczone słowami, z krawędzią między dowolną parą słów, które różnią się jedną literą, wówczas najkrótsza ścieżka od „BAG” do „DOG” składałaby się z dwóch krawędzi.
Wyzwanie
Masz napisać program, który odbiera jako dane wejściowe „słownik” słów o tej samej długości, reprezentujących wszystkie dozwolone słowa, które mogą pojawiać się jako kroki wzdłuż ścieżki. Powinien generować co najmniej jedną „najdłuższą najkrótszą ścieżkę”, to znaczy ścieżkę między dwoma słowami, która jest:
nie dłużej niż jakakolwiek inna ścieżka między tymi dwoma słowami;
przynajmniej tak długo, jak najkrótsza możliwa ścieżka między dowolną inną parą słów na liście.
W kontekście wykresu opisanego powyżej długość takiej ścieżki jest średnicą wykresu.
W zdegenerowanym przypadku, gdy żadne ze słów wejściowych nie może zostać przekształcone w żadne z pozostałych, wypisz co najmniej jedną ścieżkę o długości zero, to znaczy jedno słowo.
Przykłady
Dane wejściowe [„torba”, „nietoperz”, „kot”, „łóżeczko”, „kropka”, „pies”] powinny dać ścieżkę przechodzącą przez wszystkie sześć słów w tej kolejności (lub w odwrotnej kolejności), ponieważ najkrótsza ścieżka od „ torba „do” psa w tym słowniku to najdłuższy możliwy do osiągnięcia, pięć kroków.
Dane wejściowe [„torba”, „nietoperz”, „bot”, „kot”, „łóżeczko”, „kropka”, „pies”] powinny dać ścieżkę „torba, nietoperz, bot, kropka, pies” i / lub jego odwrócenie.
Dane wejściowe [„kod”, „golf”, „mężczyzna”, „buzz”, „kret”, „rola”, „pleśń”, „zimno”, „złoto”, „tryb”] powinny dać ścieżkę między „kodem” i „golf”.
Dane wejściowe [„jeden”, „dwa”, „sześć”, „dziesięć”] odpowiadają wykresowi bez krawędzi, więc wypisz jedną lub więcej ścieżek zawierających jedno słowo (o zerowej długości).
Jeśli dane wejściowe zawierają dowolne dwa słowa o nierównej długości, dane wyjściowe są niezdefiniowane.
Zasady
- Obowiązują standardowe zasady gry w golfa
- Będzie wiele „najkrótszych” ścieżek. Musisz wypisać co najmniej jeden, ale możesz wypisać tyle, ile chcesz.
- Możesz swobodnie decydować, w jaki sposób słownik wejściowy jest przekazywany do twojego programu.
- Najkrótszy kod w bajtach wygrywa.
[]lub [[]])?