Реконструюйте мої ляльки Матрьошка


20

Фон

Матрьошка (або російська матрьошка) являє собою набір ляльок , які підходять один в одного. Я випадково переплутав свою колекцію ляльок матрешки і не пам'ятаю, яка з них йде всередині.

Об'єктивна

Давши список унікальних струн, відсортуйте їх у вкладені ляльки-матрешки. Кожна струна - це індивідуальна лялька, а лялька матрешка - це список струн.

Правила

Нехай min(a,b)буде лексикографічний хв рядків aі b. Нехай a ⊂ bпозначають, що aє підрядком b. Потім,

  1. Список ляльок матрьошка повинен бути відсортований лексикографічно
  2. Рядок aможе вписатися в рядок, bякщоa ⊂ b
  3. Якщо a ⊂ bі a ⊂ c, тоді aзайде всерединуmin(b,c)
  4. Якщо і те, a ⊂ cі b ⊂ c, але a ⊄ b b ⊄ a, тоді тільки min(a,b)зайде всерединуc
  5. Якщо і a ⊂ cі b ⊂ c, і також a ⊂ b, то тільки bзайде всередину c. Тобто, суперструни йдуть перед підрядками, щоб матрьошка не припинився передчасно.

Приклади

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
Перша публікація тут, будь ласка, вкажіть будь-які немітні / виправлення.
sujeet

2
Ласкаво просимо до PPCG! Якщо ви не впевнені, чи достатньо хороша публікація, спочатку можете опублікувати її в пісочниці.
користувач202729

2
Це не обов'язково, просто зберігайте його тут. Громаді подобається.
користувач202729

2
@sujeet, спробуйте спочатку опублікувати в пісочниці. Це місце, щоб отримати відгуки про свої виклики, перш ніж публікувати їх на головному сайті. Не хвилюйтеся з цього приводу зараз, оскільки цей виклик здається прекрасним, як є, але це щось, що слід враховувати на майбутнє.
Rɪᴋᴇʀ

3
Яким повинен бути результат ab, ba, aba, bab? У відповідності з правилом 3, як abі baповинно йти в aba, і в відповідності з правилом 4, baне може йти ні в одну abaабо bab.
Згарб

Відповіді:


2

Python 2 , 298 байт

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

Спробуйте в Інтернеті!

-28 байт із порадами від @dylnan, пошук помилок у @Dennis та виправлення помилок від @ Mr.Xcoder


1
301 байт . Просто перетворився iна функцію лямбда і змінив ім'я змінної outна o.
ділнан

1
297 байт (E = перерахувати)
dylnan


Щоб виправити цю проблему, 298 байт . Також out3-char назва змінної ... Серйозно: P?
Містер Xcoder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.