Catena di parole ricaricata


9

Questa è una variante di Gioca la catena di parole e Costruisci una lunga catena di parole .


L'input è un elenco non vuoto di parole univoche di almeno 2 caratteri costituiti da caratteri in [az]. È necessario generare la lunghezza della catena più lunga possibile, in cui ogni parola successiva inizia con l'ultima lettera della parola precedente. Puoi iniziare con qualsiasi parola nell'elenco.

Un altro colpo di scena è che ti è permesso ripetere ogni singola parola nell'elenco. Tuttavia, non è possibile ripetere nessun blocco di due parole. Ad esempio, cat->tac->catè consentito, ma cat->tac->cat->tacnon lo è, perché è stato ripetuto un blocco di due parole ( cat->tac). Inoltre, non è possibile utilizzare la stessa parola due volte di seguito (ad es eye->eye.).

Esempi:

  • cat dog tree egg => 3 (gatto-> albero-> uovo)
  • new men ten whim => 5 (dieci-> nuovo-> capriccio-> uomini-> nuovo)
  • truth fret heart his => 5 (tasto-> verità-> cuore-> verità-> sua)
  • we were stew early yew easy => 9 (spezzatino-> erano-> inizio-> tasso-> erano-> facile-> tasso-> noi-> facile)
  • tac cat tac cot tac can => 6 (tac-> cat-> tac-> cot-> tac-> can)

(Fammi sapere se ho commesso un errore in uno di questi esempi o se ne pensi di più.)

Risposte:


3

Python 3 , 150 149 145 byte

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)

Provalo online!

L'idea per la costruzione di percorsi di successione più lunghe (o in questo caso sentieri) fino a quando nessuno poteva più essere creato è stato direttamente ispirato dalla risposta di GRC sul gioco della catena di parola domanda.


"cat dog tred xy yz zx"ritorna 4. È corretto? Non dovrebbe essere 3?
Chas Brown,

@ChasBrown xy yz zx xyè la catena più lunga, quindi 4.
notjagan,

1

Haskell , 131 141 byte

Fondamentalmente l'approccio della forza bruta .. L'idea è di generare tutti i possibili pezzi di domino , permutarli, verificare se è una combinazione valida e massimizzare il tutto. La complessità temporale è ridicola, il quarto caso di test richiede già ~ 4 secondi sul mio PC e sul TIO non sembra funzionare!

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]]

Provalo online!

Ungolfed

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) ]
  ]

Modifica : cambiato da Lambdabot per scoprire Haskell ma salvato alcuni byte giocando a golf, in modo che sia ancora meno di 145byte :)


L'ultimo ha avuto come 19 anni sul mio computer su TIO. a proposito, il motivo per cui usi Lambdabot è evitare di scrivere dichiarazioni di importazione, giusto?
geokavel,

Sì, certamente. Ma ho smesso di farlo dal momento che nessun altro lo stava facendo, non ne sono sicuro. Perché?
ბიმო

Sto cercando di capire chi ha vinto. In genere, si includono le istruzioni di importazione nel conteggio dei byte. Ma se hai trovato un ambiente che non richiede importazioni, allora va bene.
geokavel,

Oh, non accetterei comunque una risposta . Se vuoi, allora cambierò la mia risposta perché la risposta di @ notjagan è migliore della mia.
ბიმო

1
Voglio dire, questo è il codice golf, quindi sei al primo posto. Ad ogni modo, la tua risposta si adatta al tuo nome. Ma lo lascerò aperto su tua richiesta.
geokavel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.