Traceless meşgul beaver


20

Bütün bu meşgul kunduzlar oldukça karışıklık yarattı. Kasetin her yerine yazdılar. Bu oranda komşumuz bize sınırsız bantlar ödünç vermeyi bırakacak.

Meşgul kunduz oyununu oynamak için, kullandığımız her kaseti bozmayan yeni bir yola ihtiyacımız var.

Kurallar

Sadece Brainfuck. Bellek bandı her iki yönde de bağlanmamıştır. Giriş talimatı her zaman değerini gösterecektir , bu nedenle bir değeri silmek için kullanılabilir.0

50 bayt kaynak sınırı.

Yürütmenin sonunda, belleğin tümü sn olmalıdır .0

Puan, bellek işaretçisinin başlangıç ​​konumu ile son konum arasındaki mesafedir - aralarında gitmek için hareket talimatı gerekiyorsa, puanınız . Daha yüksek daha iyidir. Mümkünse tam bir değer verin, aksi takdirde bir tahmin sağlayın.nn

Misal

32 bayt,22551

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

açıklama

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

Listeden başlıyoruz . Her adımda, biz değerini tüketmek listenin solunda ve eğer , biz ekleme sağa. Eklenen sayılar orijinalden daha düşüktür , bu nedenle olana kadar küçülürler , bu noktada genişlemeden tüketilirler. Böylece, işlem sonunda saniyenin tümü bellekte sona erer . Ancak, her adımda, sayının kopya sayısı iki katına çıkar. Liste ile başlatılır, bu programın puan olan .n n > 1 [ n - 1 , n - 1 ] ( n - 1 ) ( n ) 1 0 [ n ] 2 n - 1[255]nn>1[n-1,n-1](n-1)(n)10[n]2n-1

Bu örnek, bir sunum oluştururken kullanılan bazı teknikleri göstermek içindir. Büyüklüğü için rekabetçi değil.


3
@Okx sorun değil - bu bir eleştiri olarak tasarlanmamıştı. Rasgele kod uzunluğuna izin veren bu puan için başka bir yol varsa, şimdi cevaplar gelmeden önce bulmak için zamanı. Şu anda kod golf etiketi yanıltıcı olduğu gibi bunu etiketleyeceğim
trichoplax

3
Daha fazla bayt daha hızlı büyüyen bir işlev tanımlamanıza izin verdiği için bazı sınırlar olmalıdır. Özellikle 50 için bir neden yok, bazı iyi büyüme (örneğimin üstelinden kesinlikle daha iyi) ve yaratıcı çözümler için yeterince yüksek görünüyor, ancak Beklemishev'in solucanı veya diğer son derece hızlı büyüme için hala çok küçük. // Bu arada etiketlerimi düzelttiğiniz için teşekkürler, biraz dışarı çıkıyorum.
EPICI

2
Sadece arka plan için: Kod golf için minimum puanlardan kaçınmaya çalışıyoruz , ancak bu meydan okuma kod golf değil ve bayt sayısı skor değil, bu yüzden bu durumda 50 baytlık bir sınır olmasıyla ilgili hiçbir sorun görmüyorum.
trichoplax

1
Bilgi: Sanırım bu soruyu diğer zorluklardan "önemsiz bir şekilde taşıyabilir" ve benzer puan alabilirim.
user202729

1
@EPICI Daha önceki meşgul kunduz zaten traceless, bu yüzden adapte etmeye çalışıyordum.
Jo King

Yanıtlar:


10

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

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

bir[-[<+>>[-<[->+<]+>>]+<-]>[>]+[<]+<]bir(m,n)1 - m, m, 1 <n times>mbir(m,n)

Programın davranışını modellemek için aşağıdaki Python programını kullandım:

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
Sonunda bir puan ekleyerek puanınızı artırabilirsiniz >.
Jonathan Frech

vay, çok etkileyici
alan2burada
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.