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