Stack Catsは、可逆的なスタックベースの言語です。その可逆的な性質により、やや奇妙なループになります。この挑戦は条件付きループについて(...)です。これらのループが特定の方法でネストされると、コードを変換してネストの深さを減らすことができます。ルールは次のとおりです(任意のスニペットの場所Aと略称B):
- 1つのループが別のループで始まるとき、私たちは前に内部ループを抽出することができます:
((A)B)なり(A)(B)。 - 1つのループが別のループを終了すると、我々は最後まで内部ループを抽出することができます:
(B(A))なり(B)(A)。 - 空のループを
()プログラムから完全に削除できます。当然の結果として(他の規則と組み合わせて)、((A))と同等(A)です。
残る唯一のネストされたループは、の形式です(A(B)C)。ここでA、BおよびC空ではありません。
チャレンジ
有効なStack Catsプログラムが与えられ、タスクは、上記の変換を使用して、ループのネストレベルを可能な限り減らし、空のループを残さないことです。
有効なStack Catsプログラム...
- ...は文字のみで構成され
()/\<>[]{}!"*+-:=ITX^_|ます。 - ...ミラー対称性
\(]{}!{}[)/があります(たとえば、有効なプログラムですが、そうで/|/はありません)。 - ...が正しく一致してネストされ
()、and{}([]、通常のように一致する必要は<>あり\/ませんが、ミラー対称性の要件によりペアで表示されます)。
入力として文字列または文字のリストを使用できますが、出力は同じ形式で提示する必要があります。
プログラムまたは関数を記述し、入力を受け取って出力を提供する当社の標準的な方法を使用できます。これらの抜け穴はデフォルトでは禁止されていることに注意してください。
これはcode-golfであるため、バイト単位で測定された最短の有効な回答が勝ちます。
テストケース
テストケースはそれぞれ2行(入力と出力)で、空の行で区切られています。1つの出力が空であることに注意してください。また、空の入力をサポートする必要があります(結果として空の出力になるはずです)。
(((=+|+=)))
(=+|+=)
({(=+|+=)})
({(=+|+=)})
((\)/)I(\(/))
(\)(/)I(\)(/)
(()()(())()())
((<|>((X((T)))[_]))\^/(([_](((T))X))<|>))
(<|>)(X)(T)([_])(\^/)([_])(T)(X)(<|>)
(...)-typeループに対してのみ有効です。
\^/括弧内にあるのですか?
(<|>((X((T)))[_]))とを抽出した後の最も外側の括弧です(([_](((T))X))<|>)。
((A)B(C))に(A)(B)(C)起因することになります:((A)B(C))→ (A)(B(C))(ルール1)→ (A)(B)(C)(ルール2)。
()で示されているだけなので、入力{{A}B}はそのまま残り{A}{B}、同様に抽出されませんか?