สร้าง Matryoshka Dolls ใหม่ของฉัน


20

พื้นหลัง

Matryoshka ตุ๊กตา (หรือรัสเซียรังตุ๊กตา) เป็นชุดของตุ๊กตาที่พอดีภายในของแต่ละอื่น ๆ ฉันบังเอิญผสมตุ๊กตา matryoshka ของฉันและฉันจำไม่ได้ว่าอันไหนเข้าไปข้างใน

วัตถุประสงค์

รับรายการของสตริงที่ไม่ซ้ำกันเรียงลำดับพวกเขาเป็นตุ๊กตา matryoshka ซ้อนกัน แต่ละสตริงเป็นตุ๊กตาแต่ละตัวและตุ๊กตาแมทริโดก้าเป็นรายการของสตริง

กฎระเบียบ

อนุญาตmin(a,b)เป็น minx พจนานุกรมของสตริงaและb. ขอa ⊂ bแสดงว่าที่เป็นย่อยของa bจากนั้น

  1. รายการของตุ๊กตาแม่ลูกดกจะต้องเรียงตามพจนานุกรม
  2. สตริงaสามารถใส่ลงในสตริงได้bหากa ⊂ b
  3. ถ้าa ⊂ bและa ⊂ cจากนั้นaจะเข้าไปข้างในmin(b,c)
  4. หากทั้งสองa ⊂ cและb ⊂ cแต่a ⊄ b b ⊄ aแล้วเท่านั้นmin(a,b)จะเข้าไปข้างในc
  5. หากทั้งสองa ⊂ cและb ⊂ cและยังa ⊂ bแล้วเท่านั้นจะไปภายในb cนั่นคือความเชื่อโชคลางไปก่อนสารตั้งต้นเพื่อที่ว่า matryoshka จะไม่ถูกยกเลิกก่อนเวลาอันควร

ตัวอย่าง

In:
hahaha, hah, lol, lololol, bahaha, bah, haha, ah

Out:
bahaha, bah, ah
hahaha, haha, hah
lololol, lol

In:
aa, aaaa, a, aaaaaaaaaa

Out:
aaaaaaaaaa, aaaa, aa, a

3
โพสต์แรกที่นี่โปรดชี้สิ่งที่เป็นใบ้ / แก้ไขที่จำเป็น
sujeet

2
ยินดีต้อนรับสู่ PPCG! หากคุณไม่แน่ใจว่าโพสต์นั้นดีพอคุณสามารถโพสต์ไว้ในแซนด์บ็อกซ์ก่อน
user202729

2
มันไม่ได้บังคับแค่เก็บไว้ที่นี่ ชุมชนชอบมัน
user202729

2
@sujeet ในอนาคตลองโพสต์ไปที่ sandbox ก่อน เป็นสถานที่รับข้อเสนอแนะเกี่ยวกับความท้าทายของคุณก่อนที่จะโพสต์ไว้ในเว็บไซต์หลัก ไม่ต้องกังวลกับมันตอนนี้เนื่องจากความท้าทายนี้ดูเหมือนจะดีเหมือนเดิม แต่มันเป็นสิ่งที่ต้องพิจารณาสำหรับอนาคต
Rɪᴋᴇʀ

3
สิ่งที่ควรเป็นผลมาจากab, ba, aba, bab? ตามกฎ 3 ทั้งสองabและbaควรจะไปลงabaและตามกฎที่ 4 baไม่สามารถเข้าได้ทั้งหรือaba bab
Zgarb

คำตอบ:


2

Python 2 , 298 ไบต์

def f(x,E=enumerate):
 o=[]
 while any(x):
	for k,p in E(x):
	 e=0
	 if sum(i(p,j)for j in x)<1:
		for d,r in E(o):
		 if i(p,r[-1])*((r[-1]<e)or e==0):m,e=d,r[-1]
		if e:o[m]+=[p]
		else:o+=[[p]]
		x[k]=''
 print sorted(o)
i=lambda p,b:(b!=p)*any([p==b[j:j+len(p)]for j in range(len(b)-len(p)+1)])

ลองออนไลน์!

-28 ไบต์พร้อมด้วยเคล็ดลับจาก @dylnan ข้อผิดพลาดการค้นหาโดย @Dennis และการแก้ไขข้อบกพร่องโดย @ Mr.Xcoder


1
301 ไบต์ เพียงแค่หันiเข้าสู่ฟังก์ชั่นแลมบ์ดาและเปลี่ยนชื่อตัวแปรที่จะout o
dylnan

1
297 ไบต์ (E = แจกแจง)
dylnan

ฟังก์ชั่นจะต้องใช้ซ้ำได้ แต่outตัวแปรไม่เคยเปลี่ยนแปลงลองออนไลน์!
Dennis

เพื่อแก้ไขปัญหานั้น 298 ไบต์ นอกจากนี้outชื่อตัวแปร 3 อักขระ ... อย่างจริงจัง: P
นาย Xcoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.