중복을 축소하여이 문자열을 지그재그


16

문자열이 주어지면 아래 설명과 같이 지그재그 모양의 구조로 축소하는 것입니다.

지그재그로 접기

문자열 "Mississippi"을 예로 들어 보겠습니다.

  1. 먼저 고유 문자로만 구성된 가장 긴 접두사를 출력하십시오.

    Mis
    
  2. 첫 번째 중복 문자에 도달하면 C를 , 그것을 무시하고 출력 가장 긴 접두사 (나머지 문자열의 고유 문자로 구성된 issippi의 첫 번째 항목 아래에 수직으로) C :

    Mis
      i
      s
    
  3. 수평 및 수직 연속을 번갈아 가며이 과정을 반복하십시오. 그러나 이제는 (1 단계에서)이 경우처럼 마지막 중복 문자가 아닌 최근에 발생한 중복 문자에서 수평으로 계속 출력하도록주의하십시오.

    Mis
      i
      sip
    -----
    Mis
      i
      sip
        i
    

규칙

  • 문자열에는 인쇄 가능한 ASCII 문자 만 포함되지만 공백은 포함되지 않습니다.
  • 모든 프로그래밍 언어로 경쟁 할 수 있으며 표준 방법 과 합리적인 형식 1을 통해 입력을 받고 출력을 제공 할 수 있지만 이러한 허점 은 기본적으로 금지되어 있습니다. 이것은 이므로 모든 언어에 대한 가장 짧은 제출 (바이트)이 이깁니다.
  • 1 입력 : 문자열 / 문자 목록 / 언어가 문자열을 나타내는 데 사용하는 모든 것. 출력 : 여러 줄 문자열, 줄 또는 문자 / 길이 1 문자열 목록을 나타내는 문자열 목록이지만 가능한 경우 답변에 예쁘게 인쇄 된 코드를 포함 시키십시오.
  • 추가 공백과 관련하여 출력에는 다음이 포함될 수 있습니다.
    • 줄 바꿈 선행 / 후행
    • 각 줄의 끝에 / 끝에
    • 일치하는 각 행에 선두 자리의 수
  • 수평으로 출력을 시작해야합니다 . 수직으로 시작 하지 않을 수 있습니다 .

테스트 사례

입력 :

"완전한"
"미시시피"
"독점"
"삼위 일체"
"툴후"
"PPCG"
"pOpOpOpOpOpOp"
"ABCCCE"
"ABCCCECCEEEEC"
"abcdcebffg"
"abca"
"AAAAAAAA"

해당 출력 :

성능
 씨
 티
미스
  나는
  한모금
    나는
Od
 ies
 티
트리 브
  ㅏ
  엘
  ies
  티
크툴
  유
피
씨
지
PO 
OpO
팝
 피
알파벳
  씨
  이자형
알파벳
  CCE
  E EC
abcd
  이자형
  비
  fg
알파벳
ㅏ
AA
 ㅏ

@JungHwanMin 첫 번째로 돌아가서는 안되므로 나머지 문자열 , 즉 "분기"후에는 b중복 항목 만 고려해야 합니다. 당신은 두 번째에 도달하면 , 당신 출력의 고유 한 문자의 가장 긴 접두사 나머지 문자열 이다, (따라서 출력 이 문자열이 부분에서 문자에 대한 걱정을하지 않아도, 수직 및 그 후 수평 계속) 방향 전환 전에 이미 출력되었습니다. 그래도 확실하지 않은 경우이 테스트 사례를 사용하여 다른 단계별 예제를 작성하겠습니다. cebffgebf
Mr. Xcoder

대소 문자를 어떻게 처리해야합니까? 예 :ABCcde
Rod

그것들을 다른 캐릭터로 취급해야합니다. 예 "A" ≠ "a". 결과는 ABCcde다음과 같습니다ABCcde
Mr. Xcoder

테스트 사례 제안 :AAAAAAAA
JungHwan Min

5
@JungHwanMin AAAAAAA도 추가했습니다.
Mr. Xcoder 2016 년

답변:


2

Wolfram Language (Mathematica) 143 바이트

{#}//.{q___,a_,r___,a_,Longest@s___}:>{q}~f@{a,r}~{{s}}//.{q_~f@a_~s_}/;s~FreeQ~f:>(PadLeft@{q~Join~#,##2}&)@@PadRight@Join[{a},s]/. 0->" "&

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

연산자에 0xF8FF해당 하는를 포함 합니다 \[Transpose].

휴, 결과를 문자열로 만들기가 어려웠습니다. 각 지점을 얻는 것은 그리 어렵지 않습니다.#//.{q___,a_,r___,a_,Longest@s___}:>{q,a,{r},{s}}&



1

파이썬 (2) , 184 (176) 175 168 바이트

Mr. Xcoder 덕분에 -5 바이트

def f(x):i,k=[p for p in enumerate(map(x.find,x+"z"))if cmp(*p)][0];return[x[:i]+' '*len(x)]+[' '*k+''.join(d)+i*' 'for d in zip(*f(x[i+1:]))]if x[len(set(x)):]else[x,]

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


최신 저장이 유효하지 않다고 생각합니다. 입력에 포함 된 경우 어떻게 \합니까? 또한 솔루션에 따라 OP에 따라 길이 1 문자열 목록 목록으로 출력 할 수 있습니다.
Outgolfer Erik

@EriktheOutgolfer 같은 바이트 수 : c
Rod

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.