Kelime Zinciri Yeniden Yüklendi


9

Bu, Kelime kelimesini çal ve Uzun bir kelime zinciri oluşturmanın bir çeşididir .


Giriş, [az] karakterlerinden oluşan en az 2 karakter uzunluğunda benzersiz kelimelerin boş olmayan bir listesidir. Mümkün olan en uzun zincirin uzunluğunu vermeniz gerekir, burada sonraki her sözcük önceki sözcüğün son harfiyle başlar. Listedeki herhangi bir kelimeyle başlayabilirsiniz.

Başka bir bükülme, listedeki herhangi bir kelimeyi tekrarlamanıza izin verilmesidir. Ancak, iki kelimelik bir bloğu tekrarlayamazsınız. Örneğin, iki sözcüklü bir bloğu ( ) tekrarladığınız için cat->tac->catizin verilir, ancak izin verilmez . Ayrıca, aynı kelimeyi art arda iki kez kullanamazsınız (ör. ).cat->tac->cat->taccat->taceye->eye

Örnekler:

  • cat dog tree egg => 3 (kedi-> ağaç-> yumurta)
  • new men ten whim => 5 (on-> yeni-> kapris-> erkek-> yeni)
  • truth fret heart his => 5 (perde-> gerçek-> kalp-> gerçek-> onun)
  • we were stew early yew easy => 9 (güveç-> vardı-> erken-> porsuk-> vardı-> kolay-> porsuk-> biz-> kolay)
  • tac cat tac cot tac can => 6 (tac-> cat-> tac-> karyola-> tac-> kutu)

(Bu örneklerden herhangi birinde bir hata yapıp yapmadığımı veya daha fazlasını bulursanız bana bildirin.)

Yanıtlar:


3

Piton 3 , 150 149 145 bayt

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)

Çevrimiçi deneyin!

Artık hiçbiri kadar art arda daha uzun yolları (veya bu durumda rotaları) inşa fikri doğrudan esinlenerek yaratılmış olabilir GRC cevabı üzerine Oynat kelime zinciri bir soru.


"cat dog tred xy yz zx"döner 4. Bu doğru mu? Olmamalı mı 3?
Chas Brown

@ChasBrown xy yz zx xyen uzun zincir, bu yüzden 4.
notjagan

1

Haskell , 131 141 bayt

Temel olarak kaba kuvvet yaklaşımı .. Fikir, olası tüm domino parçalarını üretmek , izin vermek, geçerli bir kombinasyon olup olmadığını kontrol etmek ve her şeyi en üst düzeye çıkarmak. Zaman karmaşıklığı saçma, 4. test durumu zaten PC'imde ~ 4s alıyor ve TIO'da çalışmıyor gibi görünüyor!

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

Çevrimiçi deneyin!

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

Düzenleme : Lambdabot çıplak Haskell için değiştirildi, ancak golf tarafından birkaç bayt kurtardı, böylece hala 145bayt daha az :)


Sonuncusu bilgisayarımda TIO'da 19'lar gibi sürdü. btw, Lambdabot'u kullanmanızın nedeni ithalat beyanları yazmamaktır, değil mi?
geokavel

Evet ediyorum. Ama bunu kimsenin yapmadığı için yapmayı bıraktım, bundan emin değilim. Neden?
ბიმო

Kimin kazandığını anlamaya çalışıyorum. Genellikle, bayt sayısına içe aktarma ifadeleri eklersiniz. Ancak, ithalat gerektirmeyen bir ortam bulduysanız sorun olmaz.
geokavel

Yine de bir yanıtı kabul etmem . Eğer istersen, cevabımı değiştireceğim çünkü @ notjagan'ın cevabı benimkinden daha iyi.
ბიმო

1
Yani bu kod golf, yani ilk etapta. Her neyse, cevabınız adınıza uyuyor. Ama isteğiniz üzerine açık bırakacağım.
geokavel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.