Berang-berang Sibuk Jejak

20

Semua berang-berang yang sibuk membuat kekacauan. Mereka menulis di seluruh kaset. Pada tingkat ini, tetangga kita akan berhenti meminjamkan kami kaset tanpa batas.

Kami membutuhkan cara baru untuk memainkan game berang-berang yang sibuk, yang tidak merusak setiap kaset yang kami gunakan.

Aturan

Brainfuck saja. Pita memori tidak terikat dua arah. Instruksi input akan selalu membaca , sehingga dapat digunakan untuk menghapus nilai.0

Batas sumber 50 byte.

Di akhir eksekusi, memori harus seluruhnya detik.0

Skor adalah jarak antara lokasi memori pointer awal dan lokasi akhir - jika dibutuhkan pindah petunjuk untuk pergi di antara mereka, skor Anda adalah n . Lebih tinggi lebih baik. Berikan nilai tepat jika Anda bisa, jika tidak, berikan taksiran.nn

Contoh

32 byte, 2255-1

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

Penjelasan

-                                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.

Kita mulai dengan daftar . Pada setiap iterasi, kita mengkonsumsi nilai n di sebelah kiri daftar, dan jika n > 1 , kita menambahkan [ n - 1 , n - 1 ] ke kanan. Angka-angka yang ditambahkan ( n - 1 ) lebih rendah dari yang asli ( n ) , sehingga mereka akan menjadi lebih kecil sampai mereka 1 , pada titik mana mereka dikonsumsi tanpa berkembang. Dengan demikian, proses berakhir pada akhirnya, dengan semua 0[255]nn>1[n-1,n-1](n-1)(n)10dalam memori. Namun, pada setiap langkah, jumlah salinan dari nomor tersebut berlipat ganda. Skor program ini diinisialisasi dengan daftar adalah 2 n - 1 .[n]2n-1

Contoh ini dimaksudkan untuk menunjukkan beberapa teknik yang digunakan dalam membuat kiriman. Ini tidak kompetitif untuk ukurannya.

EPICI
sumber
3
@ OKx tidak masalah - itu tidak dimaksudkan sebagai kritik. Jika ada cara lain untuk mencetak skor yang memungkinkan panjang kode arbitrer, sekaranglah saatnya untuk menemukannya sebelum jawaban masuk. Saya akan menguji ulang ini karena tag golf kode saat ini menyesatkan
trichoplax
3
Harus ada batasan, karena lebih banyak byte memungkinkan Anda menentukan fungsi yang tumbuh lebih cepat. Tidak ada alasan khusus untuk 50, itu terlihat cukup tinggi untuk beberapa pertumbuhan yang layak (pasti lebih baik daripada eksponensial contoh saya) dan solusi kreatif tetapi masih terlalu kecil untuk cacing Beklemishev atau pertumbuhan sangat cepat lainnya. // Terima kasih sudah memperbaiki tag saya, saya buru-buru mengeluarkannya.
EPICI
2
Hanya untuk latar belakang: Kami mencoba menghindari skor minimum untuk kode golf , tetapi tantangan ini bukan kode golf, dan jumlah byte bukan skor, jadi saya sama sekali tidak melihat masalah dengan adanya batas 50 byte dalam kasus ini.
trichoplax
1
Info: Saya rasa saya bisa "dengan sepele mem-port" jawaban ini dari tantangan lain dan mendapatkan skor yang sama.
user202729
1
@EPICI Berang-berang sibuk saya sebelumnya sudah tidak terlihat , itulah sebabnya saya mencoba untuk menyesuaikannya.
Jo King

Jawaban:

10

SEBUAH(255,2)-1=(22535)-4

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

SEBUAH[-[<+>>[-<[->+<]+>>]+<-]>[>]+[<]+<]SEBUAH(m,n)1 - m, m, 1 <n times>mSEBUAH(m,n)

Saya menggunakan program Python berikut untuk memodelkan perilaku program:

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
feersum
sumber
1
Anda dapat meningkatkan skor Anda dengan menambahkan trailing >.
Jonathan Frech
wow, sangat mengesankan
alan2 di sini