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^_|
。 - ...具有镜像对称性(例如,
\(]{}!{}[)/
是有效程序,但/|/
不是)。 - ...已正确匹配和嵌套,
()
并且{}
([]
,<>
并且\/
不一定要像往常一样进行匹配,尽管由于镜像对称性要求,它们将成对出现)。
您可以将字符串或字符列表作为输入,但是输出必须以相同的格式显示。
您可以编写程序或函数,并使用我们的任何标准方法来接收输入和提供输出。请注意,默认情况下,这些漏洞是禁止的。
这是代码高尔夫球,因此以字节为单位的最短有效答案为准。
测试用例
测试用例每行两行(输入和输出),用空行分隔。请注意,一个输出为空。您还需要支持空输入(这将导致空输出)。
(((=+|+=)))
(=+|+=)
({(=+|+=)})
({(=+|+=)})
((\)/)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}
?