,{-?>}-):(=?
#}<<.{?_<.<.<.<.<.
Введіть у вигляді значення байта , так, наприклад, введення !
дає змію довжиною 33.
Спробуйте в Інтернеті!
Пройшло багато часу...
Пояснення
Швидкий ґрунтовник Brian & Chuck:
- Перший рядок програми - Брайан, другий - Чак.
- Брайан і Чак - два екземпляри, схожі на Brainfuck. Основна уловка полягає в тому, що програма Чак - це стрічка Брайана і навпаки. Головки стрічки / покажчики інструкцій починаються на першій комірці кожної стрічки, а виконання починається на Брайані.
- Щодо команд, то тут є кілька відмінностей. Тільки Брайан може використовувати
,
(введення), а тільки Чак може використовувати .
(виводити). Крім того <
і >
існує , {
і }
які переміщують головку стрічки до наступної нульовий осередку (або в разі {
з лівим кінцем стрічки , якщо не нульовий осередки на шляху). Замість [...]
цього єдиний керуючий потік - це той, ?
який перемикає управління на інший екземпляр, якщо поточна комірка не дорівнює нулю. Перша виконана інструкція на іншій комірці - це після умови. І нарешті, _
це лише псевдонім для нульових байтів, для зручності.
Тепер код. Брайан починає з цього:
,{-?
Він зчитує вхід у першу клітинку Чака, потім переміщує головку стрічки ліворуч {
(нічого не робить зараз) та зменшує вхід -
до перемикання керування Чаком, якщо значення все ще не дорівнює нулю. З цього починається основна петля. Потім Чак запускає цей біт:
}<<.{?
Це переміщує головку стрічки на Брайана до самого кінця, переміщує дві клітинки вліво на =
та виводить її перед головкою стрічки до кінця вліво і перемикає управління назад на Брайана. Це, як правило, петлі працюють в B&C.
Після того, як вхід зменшиться до нуля, ?
стрічка Брайана нічого не зробить. Потім Брайан виконує цю частину:
>}-):(=?
Не ):(=
існує, тому власне код справедливий >}-?
. Ми відсуваємо нульову комірку за допомогою >
, переходимо до _
с }
, зменшуємо її, щоб зробити її не нульовою, і переходимо до Чука ?
. Потім виконується останній біт на Чак:
<.<.<.<.<.
Це просто друкує п’ять символів перед Чак, тобто =(:)-
. Зауважте, що нам потрібно друкувати інше, =
оскільки основний цикл виконується лише N-1
для введення разів N
.