Rekonstruksi Boneka Matryoshka Saya

20

Latar Belakang

Sebuah Matryoshka (atau boneka bersarang Rusia) adalah satu set boneka yang muat di dalam satu sama lain. Saya tidak sengaja mencampurkan koleksi boneka matryoshka saya dan saya tidak ingat yang mana yang ada di dalamnya.

Objektif

Diberikan daftar string yang unik , mengurutkannya menjadi boneka matryoshka bersarang. Setiap string adalah boneka individu, dan boneka matryoshka adalah daftar string.

Aturan

Membiarkan min(a,b)menjadi min lexicographic string adan b. Biarkan a ⊂ bmenyatakan itu aadalah substring dari b. Kemudian,

  1. Daftar boneka matryoshka harus diurutkan secara leksikografis
  2. String adapat masuk ke string bjikaa ⊂ b
  3. Jika a ⊂ bdan a ⊂ c, maka aakan masuk ke dalammin(b,c)
  4. Jika keduanya a ⊂ cdan b ⊂ c, tetapi a ⊄ b b ⊄ a, maka hanya min(a,b)akan masuk ke dalamc
  5. Jika keduanya a ⊂ cdan b ⊂ c, dan juga a ⊂ b, maka hanya bakan masuk c. Yaitu, superstring berjalan sebelum substring sehingga matryoshka tidak dihentikan sebelum waktunya.

Contohnya

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
sujeet
sumber
3
Posting pertama di sini, tolong tunjukkan apa pun yang bodoh / perbaikan yang diperlukan.
sujeet
2
Selamat datang di PPCG! Jika Anda tidak yakin apakah posnya cukup baik, Anda dapat mempostingnya di Sandbox terlebih dahulu.
user202729
2
Itu tidak wajib, simpan saja di sini. Komunitas menyukainya.
user202729
2
@sujeet di masa mendatang, coba poskan ke sandbox terlebih dahulu. Ini adalah tempat untuk mendapatkan umpan balik tentang tantangan Anda sebelum Anda mempostingnya di situs utama. Jangan khawatir tentang hal itu sekarang, karena tantangan ini tampaknya baik-baik saja, tetapi ini sesuatu yang perlu dipertimbangkan untuk masa depan.
R
3
Apa yang harus menjadi hasil ab, ba, aba, bab? Dengan aturan 3, keduanya abdan baharus masuk aba, dan dengan aturan 4, batidak bisa masuk ke salah satu abaatau bab.
Zgarb

Jawaban:

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

Cobalah online!

-28 byte dengan tips dari @dylnan, bug find by @Dennis, dan bug fix oleh @ Mr.Xcoder

fireflame241
sumber
1
301 byte . Baru saja berubah imenjadi fungsi lambda dan mengubah nama variabel outmenjadi o.
dylnan
1
297 byte (E = enumerate)
dylnan
Fungsi harus dapat digunakan kembali , tetapi outvariabel tidak pernah berubah. Cobalah online!
Dennis
Untuk memperbaiki masalah itu, 298 byte . Juga,, outnama variabel 3-char ... Serius: P?
Tn. Xcoder