마트 료 시카 인형 재구성


20

배경

마트 료 인형 (또는 러시아 중첩 인형) 서로의 내부에 맞게 인형의 집합입니다. 실수로 내 마트 료 시카 인형 모음을 섞어 놓았으며 어느 인형이 어떤 인형에 들어가는 지 기억이 나지 않습니다.

목표

고유 한 문자열 목록이 제공 되면 중첩 된 마트 료 시카 인형으로 정렬하십시오. 각 줄은 개별 인형이며 마트 료 시카는 줄 목록입니다.

규칙

min(a,b)사전 형의 최소 자릿수 a와로 하자 b. 하자 a ⊂ b나타낸다 a의 문자열입니다 b. 그때,

  1. 마트 료 시카 인형 목록은 사전 식으로 정렬해야합니다.
  2. 문자열 a에 맞게 문자열로 b하는 경우a ⊂ b
  3. 만약 a ⊂ ba ⊂ c다음 a내부 이동합니다min(b,c)
  4. 모두하다면 a ⊂ c하고 b ⊂ c있지만 a ⊄ b b ⊄ a, 만 min(a,b)내부 이동합니다c
  5. a ⊂ cb ⊂ c, 그리고 둘 다 안에 a ⊂ bb들어갑니다 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에 오신 것을 환영합니다! 게시물이 충분한 지 확실하지 않은 경우 먼저 샌드 박스에 게시 할 수 있습니다.
user202729

2
필수는 아니며 여기에 보관하십시오. 커뮤니티가 좋아합니다.
user202729

2
앞으로 @sujeet, 먼저 샌드 박스에 게시하십시오. 메인 사이트에 게시하기 전에 문제에 대한 피드백을 얻을 수있는 곳입니다. 이 문제는있는 것처럼 보이지만 앞으로는 고려해야 할 사항이므로 지금은 걱정하지 마십시오.
Rɪᴋᴇʀ

3
결과는 ab, ba, aba, bab어떻습니까? 규칙 3에 따라 ab및에 ba들어가야 aba하고 규칙 4에 의해 또는에 ba들어갈 수 없습니다 . ababab
Zgarb

답변:


2

파이썬 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)])

온라인으로 사용해보십시오!

@dylnan의 팁이있는 -28 바이트, @Dennis의 버그 찾기 및 @ Mr.Xcoder의 버그 수정


1
301 바이트 . 그냥 설정 i람다 함수에와 변수 이름을 변경 outo.
dylnan

1
297 바이트 (E = 열거)
dylnan

함수는 재사용 할 수 있어야 하지만 out변수는 절대 변경되지 않습니다. 온라인으로 사용해보십시오!
Dennis

이 문제를 해결하려면 298 바이트 입니다. 또한, out3- 문자 변수 이름 ... 심각하게 : P?
Mr. Xcoder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.