Безслідний зайнятий бобер


20

Усі ті зайняті бобри завели безлад. Вони писали по всій стрічці. З цією ставкою наш сусід перестане позичати нам безмежні стрічки.

Нам потрібен новий спосіб грати в зайняту гру в бобра - той, який не руйнує кожну використану нами стрічку.

Правила

Тільки Brainfuck. Стрічка пам'яті не обмежена обома способами. Інструкція введення завжди буде читати , тому її можна використовувати для очищення значення.0

Ліміт джерела 50 байт

Після закінчення виконання пам'ять повинна становити всі с.0

Оцінка - це відстань між початковим місцем розташування вказівника пам’яті та кінцевим місцем розташування - якщо для проходження між ними потрібно інструкцій щодо переміщення, ваш результат дорівнює n . Вище - краще. Укажіть точне значення, якщо можете, інакше вкажіть оцінку.nn

Приклад

32 байти, 22551

-[-[[>]+>+[<]>-[[>]<+<+[<]>-]]>]

Пояснення

-                                Initialize the list to [255].
 [                             ] Repeat as long as the list is not empty.
 [-                            ] Decrement the left end. We need to shrink the numbers so it ends eventually.
 [ [                         ] ] Skip if 0 already.
 [ [[>]                      ] ] Move to the cell past the right end.
 [ [   +                     ] ] Make this cell 1.
 [ [    >                    ] ] Go right again.
 [ [     +                   ] ] Make this cell 1. We've now appended [1, 1].
 [ [      [<]>               ] ] Go back to the first nonzero cell on the left.
 [ [          -              ] ] And decrement it.
 [ [           [            ]] ] We will need to transfer the rest of the number from the left to the right, so keep looping.
 [ [           [[>]<        ]] ] Go to the last nonzero cell on the right.
 [ [           [    +<+     ]] ] Increment this and the one on the left. These are the cells we appended earlier. We transfer to them.
 [ [           [       [<]> ]] ] Go back to the first nonzero cell on the left, which we are transferring from.
 [ [           [           -]] ] Decrement here on the left to balance out the incrementing on the right.
 [                            >] We end the iteration on a now empty cell. Move right, the new left end is there.

[255]nn>1[n1,n1](n1)(n)10[n]2n1

Цей приклад призначений для показу деяких методів, що використовуються при створенні подання. Він не є конкурентоспроможним за своїми розмірами.


3
@Oxx не проблема - це не було задумано як критика. Якщо є інший спосіб оцінити це, що дозволяє довільну довжину коду, зараз саме час знайти його, перш ніж відповіді надійдуть. Я збираюся позначити це, оскільки наразі код тегу для гольфу вводить в оману
trichoplax

3
Має бути деяка межа, оскільки більше байтів дозволяє визначити швидше зростаючу функцію. Зокрема, для 50-ти немає причини, вона виглядає достатньо високою для пристойного зростання (безумовно, кращого за показник мого прикладу) та творчих рішень, але все ще занадто мала для черв'яка Беклемішева чи іншого надзвичайно швидкого зростання. // Дякую за те, що виправили мої теги, до речі, я поспішив трохи дістати це.
EPICI

2
Тільки для тла: Ми намагаємося уникати мінімальних балів для гольфу з кодом , але це завдання не є кодом гольфу, а кількість байтів - це не оцінка, тому я не бачу абсолютно жодної проблеми з обмеженням 50 байт.
трихоплакс

1
Інформація: Я думаю, що я можу "тривіально портувати" цю відповідь з іншого виклику і отримати аналогічну оцінку.
користувач202729

1
@EPICI Мій попередній зайнятий бобер був уже бесследовимі, тому я намагався адаптувати його.
Джо Кінг

Відповіді:


10

A(255,2)1=(22535)4

+<+<<++>-[-[<+>>[-<[->+<]+>>]+<-]>[>]+[<]+<]>[->]

A[-[<+>>[-<[->+<]+>>]+<-]>[>]+[<]+<]A(m,n)1 - m, m, 1 <n times>mA(m,n)

Я використовував наступну програму Python для моделювання поведінки програми:

def a(M, N):
    assert M > 0
    m = [-M + 1, M]
    n = N
    while m[-1]:
        while m[-1] > 1:
            m[-1] -= 1
            m[-2] += 1
            while n:
                m.insert(-1, 1)
                n -= 1
            n = 1
        n += 2
        m.pop()
    return n

1
Ви можете збільшити свій рахунок, додавши трейлінг >.
Джонатан Фрех

вау, дуже вражаючий
alan2туть
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.