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}
також?