Reconstruire mes poupées matriochka


20

Contexte

Une poupée matriochka (ou poupée russe de nidification) est un ensemble de poupées qui s'emboîtent les unes dans les autres. J'ai accidentellement mélangé ma collection de poupées matriochka et je ne me souviens pas laquelle va à l'intérieur de laquelle.

Objectif

Étant donné une liste de chaînes uniques , triez-les en poupées matriochka imbriquées. Chaque chaîne est une poupée individuelle, et une poupée matriochka est une liste de chaînes.

Règles

Soit min(a,b)le min lexicographique des chaînes aet b. Supposons a ⊂ bque ac'est une sous-chaîne de b. Alors,

  1. La liste des poupées matriochka doit être triée lexicographiquement
  2. La chaîne apeut tenir dans la chaîne bsia ⊂ b
  3. Si a ⊂ bet a ⊂ c, alors aira à l'intérieurmin(b,c)
  4. Si les deux a ⊂ cet b ⊂ c, mais a ⊄ b b ⊄ a, alors seulement min(a,b)iront à l'intérieurc
  5. Si les deux a ⊂ cet b ⊂ c, et aussi a ⊂ b, alors seulement biront à l'intérieur c. C'est-à-dire que les superstrings passent avant les sous-chaînes afin que la matriochka ne se termine pas prématurément.

Exemples

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
Premier post ici, veuillez signaler tout ce qui est stupide / correctif nécessaire.
sujeet

2
Bienvenue chez PPCG! Si vous n'êtes pas sûr que la publication soit suffisante, vous pouvez d'abord la publier dans le bac à sable.
user202729

2
Ce n'est pas obligatoire, gardez-le ici. La communauté aime ça.
user202729

2
@sujeet à l'avenir, essayez d'abord de publier dans le bac à sable. C'est un endroit pour obtenir des commentaires sur vos défis avant de les publier sur le site principal. Ne vous en faites pas maintenant, car ce défi semble bien en l'état, mais c'est quelque chose à considérer pour l'avenir.
Rɪᴋᴇʀ

3
Quel devrait être le résultat de ab, ba, aba, bab? Selon la règle 3, les deux abet badoivent entrer dans aba, et selon la règle 4, bane peut pas entrer dans l'un abaou l' autre bab.
Zgarb

Réponses:


2

Python 2 , 298 octets

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

Essayez-le en ligne!

-28 octets avec conseils de @dylnan, recherche de bogue par @Dennis et correction de bogue par @ Mr.Xcoder


1
301 octets . Je viens de idevenir une fonction lambda et j'ai changé le nom outde la variable en o.
dylnan

1
297 octets (E = énumérer)
dylnan


Pour résoudre ce problème, 298 octets . Aussi, outnom de variable à 3 caractères ... Sérieusement: P?
M. Xcoder
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.