아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Markleft

시간 제한1초메모리 제한256 MB

요약
중첩된 마크업 규칙에 따라 각 입력 줄을 대문자 변환, 따옴표 이스케이프, 10진수 16진수 변환, 뒤집기, 그대로 복사로 바꿔 출력합니다.
난이도

보통10점 중 6점

유형
스택, 문자열, 시뮬레이션
정답자
아직 제출이 없습니다

문제

Markleft는 문장 부호로 서식을 지정하는 마크업 표기법이다. 규칙은 다음과 같다.

  • ^ 두 개 사이의 글자는 모두 대문자로 바꾼다. One^tWo^threE는 OneTWOthreE가 된다.
  • \ 두 개 사이에서는 큰따옴표마다 앞에 \를 하나씩 붙인다. Piglet \said "Hello"\는 Piglet said \"Hello\"가 된다.
  • # 두 개 사이의 수는 모두 16진수로 바꾼다. 이어진 숫자 한 덩어리가 수 하나이고, 수는 여섯 자리를 넘지 않으며, 16진수는 대문자로 쓰고 앞에 0을 붙이지 않는다. #Text with 31 12 and 64#는 Text with 1F C and 40이 된다.
  • < 두 개 사이의 글자는 순서를 뒤집는다. This <be reversed<odd는 This desrever ebodd가 된다.
  • @ 두 개 사이의 글자는 그대로 옮긴다. 즉 안쪽의 마크업은 무시한다. 그래서 출력에 @ 문자를 넣는 방법은 없다. This is @\<<#@ verbatim은 This is \<<# verbatim이 된다.

구간은 중첩할 수 있지만 괄호가 맞물리듯 올바르게 중첩해야 한다. ^aa<bcd<ee^는 AADCBEE가 된다. One #reverse me ^uppercase me # and more^는 중첩이 어긋나므로 잘못된 입력이다.

구간은 올바르게 중첩되는 첫 마크업 문자에서 닫힌다. abc^def^ghi^jkl^mno에는 중첩이 없고 abcDEFghiJKLmno가 된다. 같은 종류의 구간도 중첩될 때가 있다. 대개 효과가 크지 않지만 그렇지 않은 경우도 있어서, ab<cd^ef<gh<ij^kl<mn은 ablkJIGHFEdcmn이 된다.

안쪽 구간을 먼저 처리하므로 <#31#<는 F1이 된다.

입력

입력은 서식을 지정할 Markleft 텍스트 여러 줄이다. 각 줄의 길이는 100자를 넘지 않고, 줄마다 따로 처리한다. 모든 줄의 마크업은 올바르다. # 한 글자만 있는 줄이 입력의 끝을 알린다.

출력

각 입력 줄의 서식 결과를 입력 순서대로 한 줄씩 출력한다. 끝을 알리는 # 줄에 대해서는 아무것도 출력하지 않는다.

예제1

  1. 예제 1

    입력
    One^tWo^threE
    Piglet \said "Hello"\
    #Text with 31 12 and 64#
    This <be reversed<odd
    This is @\<<#@ verbatim
    ^aa<bcd<ee^
    abc^def^ghi^jkl^mno
    ab<cd^ef<gh<ij^kl<mn
    <#31#<
    #
    
    예상 출력
    OneTWOthreE
    Piglet said \"Hello\"
    Text with 1F C and 40
    This desrever ebodd
    This is \<<# verbatim
    AADCBEE
    abcDEFghiJKLmno
    ablkJIGHFEdcmn
    F1