Ł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).

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 .


"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 :)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.