Kiedy byłem młodszy, grałem w grę słowną o nazwie Łańcuch słów . To było bardzo proste. Pierwszy gracz wybiera słowo; następny gracz mówi inne słowo, które zaczyna się od tej samej litery, którą kończyło poprzednie słowo. Trwa to wiecznie, dopóki ktoś się nie poddaje! Sztuczka polega na tym, że nie możesz użyć tego samego słowa dwa razy (chyba że wszyscy zapomnieli, że to słowo zostało użyte!). Zwykle gramy z pewnym tematem, aby było trudniej. Ale teraz chcę, żebyś stworzył program, aby to dla mnie zrobić.
Wyzwanie
Napisz pełny program lub funkcję, aby znaleźć jak najdłuższe łańcuchy słów, używając danego zestawu słów i rozpocznij słowo.
To jest kod-golf , więc wygrywa najkrótszy kod!
Wejście
Istnieją dwa dane wejściowe: lista i słowo początkowe. Słowa początkowego nie będzie na liście. Wszystkie dane wejściowe są małymi literami ASCII, a lista nie będzie zawierać zduplikowanych słów.
Wynik
Wszystkie sekwencje słów z listy takie, że:
Słowo początkowe jest pierwszym słowem w sekwencji.
Każde kolejne słowo zaczyna się od tej samej litery, co ostatnia litera poprzedniego słowa.
Długość sekwencji jest najdłuższa z możliwych .
Jeśli istnieje wiele najdłuższych sekwencji, wyślij je wszystkie.
Sekwencja niekoniecznie musi zawierać wszystkie słowa z listy. Czasami nie jest to możliwe (patrz przypadki testowe). Znów żadne słowo nie może być użyte dwukrotnie!
Przypadki testowe
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]
Odpowiedzi:
Pyth,
2523 bajtówZestaw testowy
Rozwiązanie brutalnej siły. Zdecydowanie za wolny dla niektórych większych przypadków testowych.
Dane wejściowe w formularzu:
Dane wyjściowe w postaci:
Wyjaśnienie:
źródło
JavaScript (ES6), 164 bajty
Wyjaśnienie
Funkcja rekurencyjna, która sprawdza, jak długo lista wyników będzie dostępna dla wszystkich możliwych wyborów.
Zwraca tablicę tablic słów.
Test
Domyślny parametr nieużywany w teście, aby uczynić go bardziej kompatybilnym z różnymi przeglądarkami.
Pokaż fragment kodu
źródło
o[r.length]?
zamiasto.length>r.length?
.o[r.length]
wskazówka! Nie wiem jednak, jak mógłbym użyćpop
.Python, 104
Myślę, że powinno działać teraz ...
Wypróbuj online .
źródło
Perl 5, 275 bajtów
Prawdopodobnie nie grał w golfa tak bardzo, jak to możliwe, ale, hej, i tak nie wygrywa, prawda?
Użyj go w ten sposób:
Ostrzeżenie! Użycie tego skryptu na długiej liście wymaga dużej ilości pamięci! Działa świetnie dla mnie na siedem (sześć plus jeden dodatkowy), ale nie na trzynaście (dwanaście plus jeden).
Usuwa końcowe dane wejściowe, generuje tablicę tablic, w której tablice są wszystkimi permutacjami, i dodaje początkowe słowo z powrotem na początku. Następnie wypycha każdą taką permutację na inny odnośnik tablicowy, który jest wartością skrótu z kluczem, ilość tablicy, która ma pożądaną właściwość łączenia. Następnie wyszukuje maksimum takiego klucza i drukuje wszystkie tablice.
źródło
C, 373 bajtów
Sądzę, że mógłbym tutaj grać w golfa o wiele więcej, więc prawdopodobnie go zaktualizuję.
De-golf
Link Ideone - jeśli nie zrobiłem tego dobrze, daj mi znać: D
źródło