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}?