Stack Cats 는 뒤집을 수있는 스택 기반 언어입니다. 뒤집을 수있는 성질은 다소 이상한 고리를 만듭니다. 이 과제는 조건부 루프에 관한 것 (...)
입니다. 이러한 루프가 특정 방식으로 중첩되면 중첩 깊이를 줄이기 위해 코드를 변환 할 수 있습니다. 다음은 규칙입니다 ( 임의의 스 니펫의 위치 A
및 의미 B
).
- 한 루프가 다른 루프를 시작했을 때, 우리는 전면 내부 루프를 추출 할 수
((A)B)
해진다(A)(B)
. - 한 루프가 다른 루프가 종료되면, 우리는 마지막에 내부 루프를 추출 할 수
(B(A))
해진다(B)(A)
. - 빈 루프
()
는 프로그램에서 완전히 제거 할 수 있습니다. 다른 규칙과 함께 한 추론((A))
에 해당합니다(A)
.
남아있는 유일한 중첩 루프의 형식은 (A(B)C)
어디에 A
, B
그리고 C
비 비어 있습니다.
도전
유효한 Stack Cats 프로그램이 주어졌으며 위의 변환을 사용하여 빈 루프를 남기지 않고 중첩 수준을 최대한 줄이십시오.
유효한 Stack Cats 프로그램 ...
- ... 문자 만 구성되어 있습니다
()/\<>[]{}!"*+-:=ITX^_|
. - ... 대칭 대칭이 있습니다 (예 :
\(]{}!{}[)/
유효한 프로그램이지만/|/
그렇지 않습니다). - ... 정확하게 일치하고 중첩 된
()
과{}
([]
,<>
그리고\/
그들이 때문에 거울 대칭 요구 사항에 쌍으로 표시됩니다 있지만 반드시, 평소와 같이 일치 할 필요가 없습니다).
문자열 또는 문자 목록을 입력으로 사용할 수 있지만 출력은 동일한 형식으로 표시되어야합니다.
당신은 쓸 수 있습니다 프로그램이나 기능을 우리의 사용 표준 방법 입력을 수신하고 출력을 제공합니다. 참고 이러한 허점은 기본적으로 금지되어 있습니다.
이것은 code-golf 이므로 바이트 단위로 측정 된 가장 짧은 유효한 답변이 이깁니다.
테스트 사례
테스트 사례는 빈 줄로 구분 된 두 줄 (입력 및 출력)입니다. 하나의 출력이 비어 있습니다. 또한 빈 입력을 지원해야합니다 (빈 출력이 발생 함).
(((=+|+=)))
(=+|+=)
({(=+|+=)})
({(=+|+=)})
((\)/)I(\(/))
(\)(/)I(\)(/)
(()()(())()())
((<|>((X((T)))[_]))\^/(([_](((T))X))<|>))
(<|>)(X)(T)([_])(\^/)([_])(T)(X)(<|>)
(...)
-type 루프 에만 유효합니다 .
\^/
괄호 안에 있습니까?
(<|>((X((T)))[_]))
와 (([_](((T))X))<|>)
.
((A)B(C))
이 될 것 (A)(B)(C)
모두 규칙 1과 2로 인해 이후 : ((A)B(C))
→ (A)(B(C))
(규칙 1) → (A)(B)(C)
(규칙 2).
()
되므로 입력{{A}B}
은 그대로 유지되고 추출되지{A}{B}
않습니까?