Zrekonstruuj moje lalki Matryoshka

20

tło

Matrioszka lalki (albo Rosyjski gniazdowania lalki) to zbiór lalek, które mieszczą się wewnątrz siebie. Przypadkowo pomieszałem moją kolekcję lalek matryoshka i nie pamiętam, która z nich wchodzi do środka.

Cel

Biorąc pod uwagę listę unikatowych ciągów, posortuj je w zagnieżdżone lalki Matrioszka. Każdy sznur jest indywidualną lalką, a lalka matryoshka to lista sznurków.

Zasady

Niech min(a,b)będzie leksykograficzną miną łańcuchów ai b. Niech a ⊂ boznacza, że ajest to podłańcuch b. Następnie,

  1. Lista lalek matryoshka musi być posortowana leksykograficznie
  2. Łańcuch amoże pasować do łańcucha, bjeślia ⊂ b
  3. Jeśli a ⊂ bi a ⊂ c, to awejdzie do środkamin(b,c)
  4. Jeśli jedno a ⊂ ci drugie b ⊂ c, ale a ⊄ b b ⊄ awtedy tylko min(a,b)wejdzie do środkac
  5. Jeśli zarówno a ⊂ ca b ⊂ c, a także a ⊂ b, to tylko bbędzie wejść do środka c. Tzn. Superstruny poprzedzają podciągi, aby matryoshka nie została przedwcześnie zakończona.

Przykłady

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
źródło
3
Pierwszy post tutaj, proszę wskazać wszystko, co jest głupie / potrzebne poprawki.
sujeet
2
Witamy w PPCG! Jeśli nie masz pewności, czy post jest wystarczająco dobry, możesz go najpierw opublikować w piaskownicy.
user202729,
2
To nie jest obowiązkowe, po prostu trzymaj to tutaj. Społeczność to lubi.
user202729,
2
@sujeet w przyszłości, spróbuj najpierw opublikować w piaskownicy. To miejsce, w którym można uzyskać informacje zwrotne na temat swoich wyzwań, zanim opublikujesz je na głównej stronie. Nie martw się teraz, ponieważ wyzwanie to wydaje się być w porządku, ale jest to coś, co należy rozważyć na przyszłość.
Rɪᴋᴇʀ
3
Co powinno być wynikiem ab, ba, aba, bab? Zgodnie z regułą 3 oba powinny abi bapowinny wchodzić aba, a zgodnie z regułą 4 banie mogą wchodzić w ani abaani bab.
Zgarb

Odpowiedzi:

2

Python 2 , 298 bajtów

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

Wypróbuj online!

-28 bajtów ze wskazówkami od @dylnan, wyszukiwanie błędów przez @Dennis i naprawa błędów przez @ Mr.Xcoder

fireflame241
źródło
1
301 bajtów . Właśnie izmieniłem się w funkcję lambda i zmieniłem nazwę zmiennej outna o.
dylnan
1
297 bajtów (E = wyliczenie)
dylnan
Funkcje muszą być wielokrotnego użytku , ale outzmienna nigdy się nie zmienia. Wypróbuj online!
Dennis
Aby rozwiązać ten problem, 298 bajtów . Ponadto outnazwa zmiennej 3-znakowej ... Poważnie: P?
Pan Xcoder,