Word Chain โหลดซ้ำ


9

นี่คือตัวแปรของPlay the word chainและการสร้างเชนของคำที่ยาว


ข้อมูลที่ป้อนเป็นรายการที่ไม่ว่างของคำที่ไม่ซ้ำอย่างน้อย 2 ตัวอักษรที่ทำจากอักขระใน [az] คุณต้องแสดงความยาวของสายโซ่ที่ยาวที่สุดเท่าที่จะเป็นไปได้โดยที่แต่ละคำที่ตามมาเริ่มต้นด้วยตัวอักษรสุดท้ายของคำก่อนหน้า คุณสามารถเริ่มต้นด้วยคำใด ๆ ในรายการ

การบิดอีกอย่างหนึ่งคือคุณได้รับอนุญาตให้ทำซ้ำคำใด ๆ ในรายการ อย่างไรก็ตามคุณไม่สามารถทำซ้ำบล็อกสองคำใด ๆ ตัวอย่างเช่น cat->tac->catได้รับอนุญาต แต่cat->tac->cat->tacไม่ใช่เพราะคุณทำซ้ำบล็อกสองคำ ( cat->tac) นอกจากนี้คุณไม่สามารถใช้คำเดียวกันสองครั้งในแถว (เช่นeye->eye)

ตัวอย่าง:

  • cat dog tree egg => 3 (cat-> tree-> egg)
  • new men ten whim => 5 (ten-> new-> whim-> men-> new)
  • truth fret heart his => 5 (fret-> true-> heart-> true-> his)
  • we were stew early yew easy => 9 (สตูว์ -> เคย -> ต้น -> ต้นยู -> เคย -> ง่าย -> ต้นยู -> เรา -> ง่าย)
  • tac cat tac cot tac can => 6 (tac-> cat-> tac-> cot-> tac-> can)

(แจ้งให้เราทราบหากฉันทำผิดพลาดในตัวอย่างใด ๆ เหล่านี้หรือหากคุณได้รับมากกว่านี้)

คำตอบ:


3

Python 3 , 150 149 145 ไบต์

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)

ลองออนไลน์!

ความคิดในการสร้างเส้นทางต่อเนื่องอีกต่อไป (หรือในกรณีเส้นทางนี้) จนไม่มีอีกต่อไปอาจจะสร้างขึ้นได้แรงบันดาลใจโดยตรงจากคำตอบของ GRCบนPlay ห่วงโซ่คำคำถาม


"cat dog tred xy yz zx"4ผลตอบแทน ถูกต้องไหม ไม่ควร3หรือ
Chas Brown

@ChasBrown xy yz zx xyเป็นสายที่ยาวที่สุดดังนั้น 4.
notjagan

1

Haskell , 131 141 ไบต์

โดยพื้นฐานแล้ววิธีเดรัจฉานกำลังแรง .. ความคิดคือการสร้างชิ้นส่วนโดมิโนที่เป็นไปได้ทั้งหมด, เปลี่ยนรูปพวกมัน, ตรวจสอบว่ามันเป็นคอมโบที่ถูกต้องและเพิ่มทั้งสิ่ง ความซับซ้อนของเวลานั้นไร้สาระกรณีทดสอบครั้งที่ 4 ได้รับแล้ว ~ 4s บนพีซีของฉันและบน TIO ดูเหมือนว่ามันจะไม่ทำงาน!

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

ลองออนไลน์!

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

แก้ไข : เปลี่ยนจาก Lambdabot เป็น Haskell แต่บันทึกไว้เพียงไม่กี่ไบต์ด้วยการตีกอล์ฟดังนั้นมันจึงยังน้อยกว่า145:)


อันสุดท้ายใช้เวลา 19 วินาทีในคอมพิวเตอร์ของฉันบน TIO btw เหตุผลที่คุณใช้ Lambdabot คือการหลีกเลี่ยงการเขียนข้อความสั่งการนำเข้าใช่ไหม
geokavel

ใช่ฉันทำ. แต่ฉันหยุดทำเพราะไม่มีใครทำอย่างนี้ไม่แน่ใจ ทำไม?
ბიმო

ฉันพยายามคิดดูว่าใครจะชนะ โดยทั่วไปแล้วคุณจะรวมคำสั่งการนำเข้าเป็นจำนวนไบต์ แต่ถ้าคุณพบสภาพแวดล้อมที่ไม่ต้องการนำเข้าก็ถือว่าใช้ได้
geokavel

โอ้ฉันจะไม่ยอมรับคำตอบอยู่แล้ว ถ้าคุณต้องการฉันจะเปลี่ยนคำตอบของฉันเพราะ @ notjagan คำตอบดีกว่าของฉัน
ბიმო

1
ฉันหมายถึงนี่คือรหัสกอล์ฟดังนั้นคุณจึงมาอยู่ในอันดับแรก อย่างไรก็ตามคำตอบของคุณเหมาะกับชื่อของคุณ แต่ฉันจะปล่อยให้มันเปิดตามคำขอของคุณ
geokavel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.