Tái thiết búp bê Matryoshka của tôi


20

Lý lịch

Một con búp bê matryoshka (hay búp bê làm tổ của Nga) là một bộ búp bê vừa khít với nhau. Tôi đã vô tình trộn lẫn bộ sưu tập búp bê matryoshka của mình và tôi không nhớ cái nào đi vào bên trong.

Mục tiêu

Đưa ra một danh sách các chuỗi độc đáo , sắp xếp chúng thành búp bê matryoshka lồng nhau. Mỗi chuỗi là một búp bê riêng, và búp bê matryoshka là một danh sách các chuỗi.

Quy tắc

Hãy min(a,b)là min từ điển của chuỗi ab. Hãy a ⊂ bbiểu thị đó alà một chuỗi con của b. Sau đó,

  1. Danh sách búp bê matryoshka phải được sắp xếp theo từ vựng
  2. Chuỗi acó thể phù hợp với chuỗi bnếua ⊂ b
  3. Nếu a ⊂ ba ⊂ c, sau đó asẽ đi vào bên trongmin(b,c)
  4. Nếu cả hai a ⊂ cb ⊂ c, nhưng a ⊄ b b ⊄ a, sau đó min(a,b)sẽ chỉ đi vào bên trongc
  5. Nếu cả hai a ⊂ cb ⊂ c, và cũng có a ⊂ b, sau đó bsẽ chỉ đi vào bên trong c. Tức là, superstrings đi trước các chuỗi con để matryoshka không bị chấm dứt sớm.

Ví dụ

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
Bài đăng đầu tiên ở đây, xin vui lòng chỉ ra bất cứ điều gì ngớ ngẩn / sửa chữa cần thiết.
sujeet

2
Chào mừng đến với PPCG! Nếu bạn không chắc bài đăng có đủ tốt hay không, bạn có thể đăng bài trong Sandbox trước.
dùng202729

2
Nó không bắt buộc, chỉ cần giữ nó ở đây. Cộng đồng thích nó.
dùng202729

2
@sujeet trong tương lai, hãy thử đăng lên hộp cát trước. Đây là nơi để nhận phản hồi về những thách thức của bạn trước khi bạn đăng chúng lên trang web chính. Đừng lo lắng về điều đó ngay bây giờ, vì thử thách này có vẻ tốt, nhưng đó là điều cần xem xét cho tương lai.
Rɪᴋᴇʀ

3
Điều gì sẽ là kết quả của ab, ba, aba, bab? Theo quy tắc 3, cả hai abbanên đi vào aba, và theo quy tắc 4, bakhông thể đi vào một trong hai abahoặc bab.
Zgarb

Câu trả lời:


2

Python 2 , 298 byte

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

Hãy thử trực tuyến!

-28 byte với các mẹo từ @dylnan, tìm lỗi của @Dennis và sửa lỗi bởi @ Mr.Xcoder


1
301 byte . Chỉ cần biến ithành một hàm lambda và thay đổi tên biến outthành o.
dyl Nam

1
297 byte (E = liệt kê)
dylnan


Để khắc phục vấn đề đó, 298 byte . Ngoài ra, outtên biến 3-char ... Nghiêm túc: P?
Ông Xcoder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.