Łańcuch słów został ponownie załadowany

9

Jest to wariant gry Łańcuch słów i Budowanie długiego łańcucha słów .


Dane wejściowe to niepusta lista unikatowych słów o długości co najmniej 2 znaków w [az]. Musisz podać długość najdłuższego możliwego łańcucha, w którym każde następne słowo zaczyna się od ostatniej litery poprzedniego słowa. Możesz zacząć od dowolnego słowa z listy.

Kolejnym akcentem jest to, że możesz powtarzać dowolne słowo na liście. Nie można jednak powtórzyć żadnego bloku dwóch słów. Na przykład cat->tac->catjest dozwolone, ale cat->tac->cat->tacnie jest, ponieważ powtórzyłeś blok słów ( cat->tac). Nie można także używać tego samego słowa dwa razy z rzędu (np eye->eye.).

Przykłady:

  • cat dog tree egg => 3 (kot-> drzewo-> jajko)
  • new men ten whim => 5 (dziesięć-> nowy-> kaprys-> mężczyźni-> nowy)
  • truth fret heart his => 5 (fret-> prawda-> serce-> prawda-> jego)
  • we were stew early yew easy => 9 (gulasz-> były-> wcześnie-> cis-> były-> łatwe-> cis-> my-> łatwe)
  • tac cat tac cot tac can => 6 (tac-> cat-> tac-> łóżeczko-> tac-> puszka)

(Daj mi znać, jeśli popełniłem błąd w którymkolwiek z tych przykładów lub jeśli wymyślisz więcej).

geokavel
źródło

Odpowiedzi:

3

Python 3 , 150 149 145 bajtów

def f(d):
 a=[[w]for w in d]
 while a:b=a[0];a=[f+[l,y]for*f,l in a for y in{*d}-{b for a,b in zip(f,f[1:])if a==l}if l[-1]==y[0]]
 return len(b)

Wypróbuj online!

Pomysł konstruowania kolejno dłuższych ścieżek (lub w tym przypadku ścieżek), dopóki nie można już utworzyć, był bezpośrednio zainspirowany odpowiedzią grc na pytanie o łańcuch słów Play .

notjagan
źródło
"cat dog tred xy yz zx"zwraca 4. Czy to jest poprawne? Nie powinno tak być 3?
Chas Brown,
@ChasBrown xy yz zx xyjest najdłuższym łańcuchem, więc 4.
notjagan
1

Haskell , 131 141 bajtów

Zasadniczo podejście brutalnej siły. Chodzi o to, aby wygenerować wszystkie możliwe elementy domina , permutować je, sprawdzić, czy jest to poprawna kombinacja i zmaksymalizować całość. Złożoność czasu jest absurdalna, czwarty przypadek testowy zajmuje już ~ 4 s na moim komputerze, a na TIO nie działa!

import Data.List
p w=2+maximum[length$takeWhile(\(x,y)->x!!1==y!!0)$zip p$tail p|p<-permutations[[a,b]|(a,b)<-(,)<$>w<*>w,a/=b,last a==b!!0]]

Wypróbuj online!

Nie golfił

p w = maximum
  [ 2 + length c | p <- permutations [ [a,b] | (a,b) <- (,)<$>w<*>w
                                             , a /= b
                                             , last a == head b
                                     ]
                 , c <- [ takeWhile (\(x,y) -> x!!1 == y!!0) $ zip p (tail p) ]
  ]

Edycja : Zmieniono z Lambdabot na czysty Haskell, ale zaoszczędzono kilka bajtów, grając w golfa, tak że wciąż jest mniej niż 145bajtów :)

ბიმო
źródło
Ostatni zajął około 19 lat na moim komputerze na TIO. btw, powodem, dla którego używasz Lambdabot, jest unikanie pisania instrukcji importu, prawda?
geokavel
Tak. Ale przestałem to robić, ponieważ nikt inny tego nie robił, nie jestem tego pewien. Dlaczego?
ბიმო
Próbuję dowiedzieć się, kto wygrał. Zazwyczaj instrukcje importu są uwzględniane w liczbie bajtów. Ale jeśli znalazłeś środowisko, które nie wymaga importu, to jest w porządku.
geokavel
Och, i tak nie przyjąłbym odpowiedzi . Jeśli chcesz, zmienię moją odpowiedź, ponieważ odpowiedź @ notjagan jest lepsza niż moja.
ბიმო
1
Mam na myśli, że to jest golf golfowy, więc jesteś na pierwszym miejscu. W każdym razie Twoja odpowiedź pasuje do twojego imienia. Ale zostawię to otwarte na twoją prośbę.
geokavel