Ваше завдання полягає в тому, щоб мінімізувати код Brainfuck відповідно до цих правил:
- Видаліть все, що не належить до
+-><[].,
. - Для будь-якої групи послідовних
+
або-
символів, якщо кількість+
s і-
s однакова, видаліть їх. - Зробіть те саме, що вище, але з
>
і<
. - Видаліть послідовності
+-><
символів, якщо вони нічого не роблять. Наприклад, вам слід видалити+>-<->+<
. (Це може бути найскладнішим і найскладнішим у здійсненні.) Переконайтеся, що у вас немає помилок, наприклад+>-<+>-<
, які не слід видаляти.
Тестові приклади:
Вхідні дані
++++++[->++++++<]>. prints a $
[-]< resets tape
>,[>,]<[.<] reverses NUL terminated input string
++-->><< does nothing
Вихідні дані
++++++[->++++++<]>.[-],[>,]<[.<]
Вхідні дані
Should disappear: ++>>+<+++<->-->-<<->-<
Should disappear: +++>-<--->+<
Should stay: +++>-<+>---<
Вихідні дані
+++>-<+>---<
Ви можете приймати вхід і вихід, як би ви хотіли - stdin / stdout, функція тощо, але вхід може бути не жорстким.
Це код-гольф , тому найкоротший код у кількості символів виграє.
+++>-<+>---<
,? Його можна скоротити, щоб уникнути зайвого руху вказівника, але очікуваний вихід залишає його незмінним. Моє розуміння, що ґрунтується на перегляді і питання, і відповідей, полягає в тому, що Доркноб крутий, коли специфіка неприйнята; ми повинні усунути будь-які неоперативні послідовні +-><
послідовності, як прямо вказано, і крім цього допустимо додаткове мінімізація, як у вашому прикладі ++>>++<<--
, і ми також можемо робити перестановки, доки вони не змінюють функціональність коду, наприклад, >+<+
у +>+<
.
+>-<->+<
. (Це може бути найскладнішим і найскладнішим для реалізації.) Переконайтеся, що у вас немає помилкових позитивних результатів, наприклад +>-<+>-<
, які не слід видаляти ". - це
++>>++<<--
повинні вивести>>++<<
, і це не було охоплено. Будь ласка, додайте більше тестових випадків.