Rantai Kata Muat Ulang

9

Ini adalah varian dari Play the word chain dan Membangun rantai kata yang panjang .


Input adalah daftar kata-kata unik yang tidak kosong, minimal 2 karakter yang dibuat dari karakter dalam [az]. Anda perlu menampilkan panjang rantai terpanjang yang mungkin, di mana setiap kata berikutnya dimulai dengan huruf terakhir dari kata sebelumnya. Anda dapat mulai dengan kata apa saja pada daftar.

Pelintiran lain adalah Anda diizinkan mengulangi satu kata pun dalam daftar. Namun, Anda tidak dapat mengulangi blok dua kata apa pun. Misalnya, cat->tac->catdiizinkan, tetapi cat->tac->cat->tactidak, karena Anda mengulangi blok dua kata ( cat->tac). Selain itu, Anda tidak dapat menggunakan kata yang sama dua kali berturut-turut (mis eye->eye.).

Contoh:

  • cat dog tree egg => 3 (kucing-> pohon-> telur)
  • new men ten whim => 5 (sepuluh-> baru-> kemauan-> men-> baru)
  • truth fret heart his => 5 (fret-> kebenaran-> hati-> kebenaran-> miliknya)
  • we were stew early yew easy => 9 (semur-> dulu-> awal-> yew-> tadi-> mudah-> yew-> kita-> mudah)
  • tac cat tac cot tac can => 6 (tac-> cat-> tac-> cot-> tac-> can)

(Beri tahu saya jika saya membuat kesalahan pada salah satu contoh ini atau jika Anda menghasilkan lebih banyak.)

geokavel
sumber

Jawaban:

3

Python 3 , 150 149 145 bytes

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)

Cobalah online!

Gagasan untuk membangun secara berturut-turut jalur yang lebih panjang (atau dalam hal ini jejak) sampai tidak ada lagi yang bisa dibuat secara langsung terinspirasi oleh jawaban grc pada pertanyaan the the Chain the word .

notjagan
sumber
"cat dog tred xy yz zx"kembali 4. Apakah itu benar? Bukankah seharusnya begitu 3?
Chas Brown
@ChasBrown xy yz zx xyadalah rantai terpanjang, jadi 4.
notjagan
1

Haskell , 131 141 byte

Pada dasarnya pendekatan brute force .. Idenya adalah untuk menghasilkan semua kemungkinan kartu domino , permute mereka, periksa apakah itu kombo yang valid dan maksimalkan semuanya. Kompleksitas waktu konyol, test case ke-4 sudah memakan waktu ~ 4s di PC saya dan pada TIO sepertinya tidak berfungsi!

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

Cobalah online!

Tidak disatukan

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

Sunting : Diubah dari Lambdabot untuk menelanjangi Haskell tetapi menyimpan beberapa byte dengan golf, sehingga itu masih kurang dari 145byte :)

ბიმო
sumber
Yang terakhir mengambil seperti 19-an di komputer saya di TIO. btw, alasan Anda menggunakan Lambdabot adalah untuk menghindari menulis pernyataan impor, kan?
geokavel
Ya saya lakukan. Tetapi saya berhenti melakukan itu karena tidak ada orang lain yang melakukan ini, tidak yakin tentang hal itu. Mengapa?
ბიმო
Saya mencoba mencari tahu siapa yang menang. Biasanya, Anda memasukkan pernyataan impor dalam hitungan byte. Tetapi, jika Anda menemukan lingkungan yang tidak memerlukan impor, maka itu tidak masalah.
geokavel
Oh, aku tidak akan menerima jawaban . Jika Anda mau, maka saya akan mengubah jawaban saya karena jawaban @ notjagan lebih baik daripada jawaban saya.
ბიმო
1
Maksud saya ini kode golf, jadi Anda yang utama. Bagaimanapun, jawaban Anda sesuai dengan nama Anda. Tapi saya akan membiarkannya terbuka atas permintaan Anda.
geokavel