교정기 등 수정


15

당신이 그것을 수락하기로 결정한 경우, 주어진 문자열 (괄호, 중괄호 및 대괄호 만 포함)이 올바른 중괄호 일치를 갖도록 최소 수의 괄호, 중괄호 및 대괄호 를 추가 하는 것이 임무 입니다. 쌍을 이루는 버팀대 사이 의 최대 거리 를 가짐으로써 추가 된 기호 타이를 끊어야합니다. 이 두 규칙과 일치하는 정답을 하나만 반환해야합니다. 다른 유대가 존재한다면, 당신이 원하는대로 깨질 수 있습니다.

예 :

input      output
                          // Empty String is a legal input
[          []             // Boring example
[()]       [()]           // Do nothing if there's nothing to be done
({{        ({{}})         // NOT (){}{} (0 + 0 + 0). Maximum distance is 4 + 2 + 0, ({{}})
[([{])]}   {[([{}])]}     // NOT [([])]{[([])]} or similar

프로그램이나 함수를 작성하고 STDIN을 통해 입력을 함수 의 문자열 인수로 수신 하여 출력을 문자열로 리턴하거나 STDOUT (또는 가장 가까운 대안)으로 인쇄 할 수 있습니다. 선택적으로 출력에 단일 후행 줄 바꿈을 포함시킬 수 있습니다.

입력 문자열이 다음 6 자 (또는 그 부족)로만 구성되어 있다고 가정 할 수 있습니다. [](){}(지원하지 않아도 됨 <>)

이것은 , 가장 짧은 프로그램 승리입니다. 물론 표준 허점은 금지되어 있습니다 .


실제 제목 바로 아래에서 제목을 반복하거나 실제 태그 바로 위의 태그를 반복 하시겠습니까? 샌드 박스에서 붙여 넣은 사본을 복사하여 제거하는 것을 잊어 버린 경우에만 물어보십시오.
Rainbolt

@Rainbolt 전 아니오 (샌드 박스), 후자
durron597

1
@AlexA. 그것들이 사소한 방식으로 어떻게 다른지 알 수 있지만, 그것들이 별도의 질문으로 간주 되기에는 너무 유사하다고 생각합니다.
NinjaBearMonkey

그럴 수 있지. 확실히 자르지 않고 건조하지 않으며 다른 사람들이 원하지 않는 경우 닫히지 않을 것입니다.
NinjaBearMonkey

나는 그것을 충분히 다르게 고려할 것입니다. 다시 열기로 투표
nderscore

답변:


1

파이썬 2-198

나는 이해력을 조금 더 낮추기를 원했지만 지금은 실제로 다른 일을하는 방법을 테스트 할 시간이 많지 않습니다.

s="()[]{}";f=s.find
def F(S):
 r=m=""
 for c in S:
    i=f(c)^1
    if i%2:m=c+m;r+=c
    else:
     for d in m:
        if d==s[i]:break
        r+=s[f(d)^1]
     else:r=s[i]+r+c
     m=m[1:]
 for c in m:r+=s[f(c)^1]
 return r

OP에는 {[([{}])]}{[(인접 그룹과 같은) 예제가 포함되어 있지 않지만이 기능이 필요한지 여부는 올바른 출력입니다.{[([{}])]}{[]}


198 바이트는 어떻습니까?
Zacharý

@ZacharyT, 탭 ( \t)은 스택 오버플로에서 4 개의 공백으로 서식이 지정되지만 실제로 탭과 공백을 번갈아 사용하고 있습니다 (3이 아닌 들여 쓰기 수준에 대해이 작업을 수행 할 수 있음). 첫 번째 수준은 [space][tab]번째 [tab][space]입니다 [tab][tab]. 공백으로 코드를 입력하면 여기에서 mother27.in/byte-counter 로부터 227을 얻을 수 있으며 10 개의 탭을 계산하므로 227- (3 * 10) = 197입니다. 이것을 게시했습니다.
KSab

당장! 정말 좋은 트릭입니다. (줄 끝에 입력하십시오). 하단 for-loop와 return-statement를 결합하여 return r+[s[f(c)^1]for c in m]바이트를 절약 할 수 있습니다.
Zacharý

1

하스켈, 513

기능 h입니다. 이전 버전에서는 "({{)["및에 대한 올바른 답변을 제공하지 않았습니다."({{)}}"

import Control.Monad

m '('=')'
m '['=']'
m '{'='}'
m ')'='('
m ']'='['
m '}'='{'

data B=B Char[B]|N[B]|Z B Char[B]
instance Eq B where(==)a b=q a==q b
instance Ord B where(<=)a b=q a<=q b

w(B o s)=o:(s>>=w)++[m o]
v(N k)=k>>=w
n(B _ k)=(sum$n<$>k)+1
q(N k)=sum$n<$>k

u(Z(Z g pc pk) c k)=Z g pc(pk++[B c k])
u(Z(N pk) c k)=N(pk++[B c k])
t(N k)=N k
t z=t$u z

f z c|elem c "([{"=[Z z c[]]
f z@(Z p o k) c|m c==o=[u z]|2>1=(u$Z(Z p o [])(m c)k):f(u z)c
f (N k)c=[Z(N[])(m c)k]

h s=v.minimum$t<$>foldM f(N [])s
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.