Stack Cats to odwracalny język oparty na stosie. Jego odwracalna natura tworzy nieco dziwne pętle. To wyzwanie dotyczy pętli warunkowej (...). Gdy te pętle są zagnieżdżone w określony sposób, możliwe jest przekształcenie kodu w celu zmniejszenia głębokości zagnieżdżenia. Oto zasady (gdzie Ai Boznaczają dowolne fragmenty):
- Kiedy jedna pętla zaczyna się od innej, możemy wyodrębnić wewnętrzną pętlę do przodu:
((A)B)staje się(A)(B). - Kiedy jedna pętla kończy się na drugiej, możemy wyodrębnić wewnętrzną pętlę do końca:
(B(A))staje się(B)(A). - Puste pętle
()można całkowicie usunąć z programu. Jako następstwo (w połączeniu z innymi zasadami)((A))jest równoważne z(A).
Jedyne zagnieżdżonej pętli, które zachowują się w formie (A(B)C), gdzie A, Ba Cto nie jest pusty.
Wyzwanie
Otrzymałeś prawidłowy program Stack Cats, a Twoim zadaniem jest maksymalne zmniejszenie poziomu zagnieżdżania pętli, bez pozostawiania pustych pętli, przy użyciu powyższych transformacji.
Prawidłowy program Stack Cats ...
- ... składa się tylko z postaci
()/\<>[]{}!"*+-:=ITX^_|. - ... ma symetrię lustrzaną (np.
\(]{}!{}[)/jest poprawnym programem, ale/|/nie jest). - ... prawidłowo dobrane i zagnieżdżone
()i{}([],<>i\/niekoniecznie muszą być dopasowane, jak zwykle, chociaż oni pojawiają się w parach ze względu na wymóg symetrii lustrzanej).
Jako dane wejściowe możesz wziąć ciąg znaków lub listę znaków, ale dane wyjściowe muszą być prezentowane w tym samym formacie.
Możesz napisać program lub funkcję i użyć dowolnej z naszych standardowych metod otrzymywania danych wejściowych i dostarczania danych wyjściowych. Pamiętaj, że te luki są domyślnie zabronione.
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Przypadki testowe
Przypadki testowe składają się z dwóch linii (wejściowej i wyjściowej), oddzielonych pustymi liniami. Zauważ, że jedno wyjście jest puste. Musisz także obsługiwać puste dane wejściowe (co powinno skutkować pustymi danymi wyjściowymi).
(((=+|+=)))
(=+|+=)
({(=+|+=)})
({(=+|+=)})
((\)/)I(\(/))
(\)(/)I(\)(/)
(()()(())()())
((<|>((X((T)))[_]))\^/(([_](((T))X))<|>))
(<|>)(X)(T)([_])(\^/)([_])(T)(X)(<|>)
(...)pętli typu.
\^/w nawiasie?
(<|>((X((T)))[_]))i (([_](((T))X))<|>).
((A)B(C))będzie (A)(B)(C)ze względu na obu reguł 1 i 2 kolejno: ((A)B(C))→ (A)(B(C))(zasada 1) → (A)(B)(C)(reguła 2).
(), więc dane wejściowe{{A}B}pozostaną takie, jakie są i do których nie zostaną również wyodrębnione{A}{B}?