Іноді під час написання кодів для епізоду ви відчуваєте необхідність зробити його довше, ніж потрібно для заохочення налагодження. Ви можете це зробити, просто занурившись ><
, але що це весело? Вам знадобиться щось довше і менше NOPey, щоб заплутати когось, хто читає ваш код.
Швидке знайомство з Brainfuck
Brainfuck - це езотерична мова програмування, створена в 1993 році Урбаном Мюллером, і відома своїм надзвичайним мінімалізмом. (Вікіпедія)
Brainfuck є мова , заснований на восьми команд: +-><,.[]
. Код виконується на зразок машини Тюрінга: нескінченної стрічки, на якій можна змінювати значення. У цьому виклику ми зупинимося на перших чотирьох:
+ increment the value at the pointer
- decrement the value at the pointer
> move the pointer right
< move the pointer left
Brainfuck НОП
NOP «мозговий ебать» - це послідовність персонажів, які виконуються мозком, які, виконуючись з будь-якого стану, не призводять до зміни стану. Вони складаються з чотирьох згаданих вище символів.
Змагання
Завдання полягає в тому, щоб написати програму або функцію, яка, виконуючись, генерує випадковий NOP-ефір заданої довжини.
Вхідні дані
Ви отримаєте як вхідне негативне парне ціле число n
. (Непарні NOP неможливі n
.)
Вихідні дані
Ви виведете випадковий NOP на довжину n
.
Правила
- Визначення NOP: коли вихід програми вставляється в будь-якій точці програми, що не є мозком, поведінка зазначеної програми не повинно жодним чином змінюватися. Іншими словами, він не повинен змінювати стан перекладача.
- Зауважте, що, наприклад
+>-<
, невірно, оскільки він змінює значення двох комірок, не змінюючи їх назад. Будь ласка, протестуйте своє рішення для цього перед публікацією. - Також зауважте, що
+>-<->+<
це NOP, який не можна звести ні до чого, просто видаливши><
<>
+-
-+
. Таким чином, ви не можете використовувати алгоритм, який просто вставляє їх всередину один одного.
- Зауважте, що, наприклад
- Кожен дійсний NOP довжини
n
повинен мати ненульовий шанс появи у висновку. Однак розподіл не повинен бути рівномірним. - Розмовний інтерпретатор, про який йде мова, має подвійну нескінченну стрічку з клітинами довільної точності. Тобто, ви можете піти нескінченно в обидва напрямки, і збільшувати / зменшувати кожну клітинку на невизначений термін.
- Програма повинна закінчитися протягом 1 хвилини на
n
= 100 на моїй машині, тому не створювати всіх можливих НОП і вибирати одну. - Якщо вам дано недійсне введення (не ціле число, мінус, непарність тощо), ви можете робити все, що завгодно, включаючи збій.
Оцінка балів
Це код-гольф , тому найкоротша відповідь у байтах виграє.
Приклади
Ось усі дійсні результати для n
= 4:
++-- +-+- +--+ --++ -+-+ -++-
>><< ><>< ><<> <<>> <><> <>><
><+- ><-+ <>+- <>-+
>+-< >-+< <+-> <-+>
+><- -><+ +<>- -<>+
+->< -+>< +-<> -+<>
Ось кілька можливих результатів для n
= 20:
+>>->+<->-<<<->>++<<
>+>-<+<->+-<>->+<-<+
+--+-++--++-+--+-++-
>>>>>>>>>+-<<<<<<<<<
.
має побічний ефект, ,
замінює значення, яке неможливо відновити без використання []
. Але []
в кінцевому підсумку встановлення значення дорівнює нулю. Це також перезаписує значення (тому нам знадобиться інше, []
щоб відновити його), якщо ми не можемо бути впевнені, що постраждала клітина для початку була нульовою. Однак нам би довелося шукати таку клітинку з чимось подібним [>]
, і неможливо надійно повернутися до позиції, з якої ми прийшли.
+-<>
як ви просили:a