Matryoshka Bebeklerimi Yeniden Yapılandır


20

Arka fon

Bir matryoshka bebek (veya Rus yuvalama bebek), birbirinin içine uyan bir bebek setidir. Matryoshka bebek koleksiyonumu yanlışlıkla karıştırdım ve hangisinin içeri gireceğini hatırlamıyorum.

Amaç

Benzersiz dizelerin bir listesi verildiğinde , bunları iç içe matryoshka bebeklerine ayırın. Her dize ayrı bir bebek ve bir matryoshka bebek dizelerin bir listesidir.

kurallar

Izin vermek min(a,b)dizelerin sözlükbilimsel min ave b. Let a ⊂ bgöstermek ade bir alt b. Sonra,

  1. Matruşka bebeklerinin listesi sözlükbilimsel olarak sıralanmalıdır
  2. Dize aolabilir sığdırmak dize içine beğera ⊂ b
  3. Eğer a ⊂ bve a ⊂ cardından aiçeri gidecekmin(b,c)
  4. Her ikisi de a ⊂ cve b ⊂ c, ama, ancak a ⊄ b b ⊄ ao zaman sadece min(a,b)içeri girecekc
  5. Hem a ⊂ cve hem de b ⊂ c, ve a ⊂ bsonra, sadece biçeri girer c. Yani, süper dizeler alt dizelerden önce gider, böylece matryoshka erken sonlandırılmaz.

Örnekler

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
Burada ilk gönderi, lütfen aptal / düzeltmeler gereken her şeyi belirtin.
sujeet

2
PPCG'ye Hoşgeldiniz! Gönderinin yeterince iyi olup olmadığından emin değilseniz, önce onu Sandbox'a gönderebilirsiniz.
user202729

2
Zorunlu değil, sadece burada kalsın. Topluluk böyle.
user202729

2
@ sujeet gelecekte, önce kum havuzuna göndermeyi deneyin. Ana sitede yayınlamadan önce zorluklarınız hakkında geri bildirim alabileceğiniz bir yer. Endişelenme şimdi, çünkü bu meydan okuma olduğu gibi iyi görünüyor, ancak gelecek için dikkate alınması gereken bir şey.
Rɪᴋᴇʀ

3
Sonuç ne olmalı ab, ba, aba, bab? Kural 3 ederek, hem abve baiçine gitmeli abave kural 4 tarafından, baya giremem abaya bab.
Zgarb

Yanıtlar:


2

Python 2 , 298 bayt

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

Çevrimiçi deneyin!

@Dylnan'dan ipuçları ile 28 bayt, @Dennis tarafından hata bulma ve @ Mr.Xcoder tarafından hata düzeltme


1
301 bayt . Sadece ilambda işlevine döndü ve değişken adını olarak outdeğiştirdi o.
dylnan

1
297 bayt (E = numaralandırma)
dylnan


Bu sorunu gidermek için 298 bayt . Ayrıca, out3 karakterlik değişken adı ... Cidden: P?
Bay Xcoder
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.