Rekonstruiere meine Matroschka-Puppen

20

Hintergrund

Eine Matroschka-Puppe (oder russische Nistpuppe) ist eine Reihe von Puppen, die ineinander passen. Ich habe versehentlich meine Sammlung von Matroschka-Puppen verwechselt und weiß nicht mehr, welche in welche passt.

Zielsetzung

In einer vorgegebenen Liste von einzigartigen Strings, sortieren sie in verschachtelte Matrjoschka - Puppen. Jede Saite ist eine individuelle Puppe, und eine Matroschka-Puppe ist eine Liste von Saiten.

Regeln

Sei min(a,b)das lexikografische Minimum von Strings aund b. Es sei a ⊂ bbezeichnet, dass dies aeine Teilzeichenfolge von ist b. Dann,

  1. Die Liste der Matroschka-Puppen muss lexikographisch sortiert sein
  2. String akann in String passen,b wenna ⊂ b
  3. Wenn a ⊂ bund a ⊂ c, dann awird reingehenmin(b,c)
  4. Wenn beide a ⊂ cund b ⊂ c, aber a ⊄ b b ⊄ a, dann wird nur min(a,b)hineingehenc
  5. Wenn beide a ⊂ cund b ⊂ c, und auch a ⊂ b, dann wird nur bhineingehen c. Das heißt, Superstrings stehen vor Teilstrings, damit die Matroschka nicht vorzeitig beendet wird.

Beispiele

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
quelle
3
Erster Beitrag hier, bitte weise darauf hin, was dumm / repariert werden muss.
Sujeet
2
Willkommen bei PPCG! Wenn Sie nicht sicher sind, ob der Beitrag gut genug ist, können Sie ihn zuerst in der Sandbox veröffentlichen.
user202729
2
Es ist nicht obligatorisch, behalte es hier. Die Community mag es.
user202729
2
@sujeet in der Zukunft versuchen, zuerst in der Sandbox zu veröffentlichen. Hier können Sie Feedback zu Ihren Herausforderungen erhalten, bevor Sie sie auf der Hauptseite veröffentlichen. Mach dir jetzt keine Sorgen, denn diese Herausforderung scheint in Ordnung zu sein, aber es ist etwas, das du für die Zukunft in Betracht ziehen solltest.
16.
3
Was soll das Ergebnis sein ab, ba, aba, bab? Durch die Regel 3, die beide abund bagehen in abaund um 4 Regel banicht gehen kann entweder abaoder bab.
Zgarb

Antworten:

2

Python 2 , 298 Bytes

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

Probieren Sie es online!

-28 Bytes mit Tipps von @dylnan, Fehlersuche von @Dennis und Fehlerbehebung von @ Mr.Xcoder

fireflame241
quelle
1
301 Bytes . Wurde einfach iin eine Lambda-Funktion umgewandelt und änderte den Variablennamen outin o.
Dylnan
1
297 Bytes (E = Aufzählung)
Dylnan
Funktionen müssen wiederverwendbar sein , aber die outVariable ändert sich nie. Probieren Sie es online!
Dennis
Um dieses Problem zu beheben, 298 Bytes . Auch out3-Zeichen-Variablenname ... Ernsthaft: P?
Mr. Xcoder