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