Ricostruisci le mie bambole matrioska


20

sfondo

Una bambola matryoshka (o bambola russa di nidificazione) è un set di bambole che si incastrano l'una nell'altra. Ho accidentalmente confuso la mia collezione di bambole matrioska e non ricordo quale va dentro quale.

Obbiettivo

Dato un elenco di stringhe uniche , ordinale in bambole matrioska nidificate. Ogni stringa è una singola bambola e una bambola matrioska è un elenco di stringhe.

Regole

Lascia che min(a,b)sia il min lessicografico di stringhe ae b. Lasciate a ⊂ bindicare che aè una sottostringa di b. Poi,

  1. L'elenco delle bambole matrioska deve essere ordinato lessicograficamente
  2. La stringa apuò adattarsi alla stringa bsea ⊂ b
  3. Se a ⊂ be a ⊂ c, allora aandrà dentromin(b,c)
  4. Se entrambi a ⊂ ce b ⊂ c, ma a ⊄ b b ⊄ a, allora min(a,b)andranno solo dentroc
  5. Se entrambi a ⊂ ce b ⊂ c, e anche a ⊂ b, allora bandranno solo dentro c. Cioè, le superstringhe vanno prima delle sottostringhe in modo che la matrioska non venga prematuramente interrotta.

Esempi

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
Primo post qui, si prega di indicare tutto ciò che è stupido / correzioni necessarie.
sujeet

2
Benvenuti in PPCG! Se non sei sicuro che il post sia abbastanza buono, puoi prima pubblicarlo nella Sandbox.
user202729

2
Non è obbligatorio, tienilo qui. Alla comunità piace.
user202729

2
@sujeet in futuro, prova a pubblicare prima nella sandbox. È un posto dove ottenere feedback sulle tue sfide prima di pubblicarle sul sito principale. Non preoccuparti adesso, poiché questa sfida sembra andare bene così com'è, ma è qualcosa da considerare per il futuro.
Rɪᴋᴇʀ

3
Quale dovrebbe essere il risultato ab, ba, aba, bab? In base alla regola 3, entrambi abe badovrebbero entrare aba, e in base alla regola 4, banon possono andare in abao bab.
Zgarb,

Risposte:


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

Provalo online!

-28 byte con suggerimenti da @dylnan, ricerca di bug da @Dennis e correzione di bug da @ Mr.Xcoder


1
301 byte . Appena trasformato iin una funzione lambda e modificato il nome della variabile outin o.
Dylnan,

1
297 byte (E = enumerato)
dylnan,


Per risolvere il problema, 298 byte . Inoltre, outnome della variabile a 3 caratteri ... Scherzi a parte: P?
Mr. Xcoder
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.