Traceless beschäftigter Biber


20

Alle diese beschäftigten Biber haben ein ziemliches Durcheinander gemacht. Sie haben überall auf dem Band geschrieben. Bei dieser Geschwindigkeit wird unser Nachbar aufhören, uns unbegrenzte Bänder zu leihen.

Wir brauchen eine neue Art, das beschäftigte Biberspiel zu spielen, eine, die nicht jedes Band ruiniert, das wir verwenden.

Die Regeln

Nur Brainfuck. Das Speicherband ist in beide Richtungen unbegrenzt. Der Eingabebefehl lautet immer und kann zum Löschen eines Werts verwendet werden.0

Quellenlimit von 50 Byte.

Am Ende der Ausführung muss der Speicher alle s sein.0

Punktzahl ist die Entfernung zwischen der Startposition des Speicherzeigers und der Endposition. Wenn Sie Bewegungsanweisungen benötigen, um zwischen ihnen zu wechseln, beträgt Ihre Punktzahl . Höher ist besser. Geben Sie nach Möglichkeit einen genauen Wert an, andernfalls eine Schätzung.nn

Beispiel

32 Bytes,22551

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

Erläuterung

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

Wir beginnen mit der Liste . Bei jeder Iteration verbrauchen wir den Wert links von der Liste, und wenn , hängen wir rechts an. Die angehängten Zahlen sind niedriger als die ursprünglichen Zahlen , daher werden sie kleiner, bis sie sind. An diesem Punkt werden sie verbraucht, ohne zu expandieren. Somit endet der Prozess schließlich mit allen s im Speicher. Bei jedem Schritt verdoppelt sich jedoch die Anzahl der Kopien. Die Punktzahl dieses mit der Liste initialisierten Programms ist .[255]nn>1[n1,n1](n1)(n)10[n]2n1

Dieses Beispiel soll einige der Techniken zeigen, die zum Erstellen einer Einreichung verwendet werden. Es ist nicht wettbewerbsfähig für seine Größe.


3
@Okx kein Problem - das war nicht als Kritik gedacht. Wenn es einen anderen Weg, dies zu erzielen , die beliebige Codelänge ermöglicht, ist jetzt die Zeit , es zu finden , bevor Antworten kommen in Ich werde dies retag wie zur Zeit der Code Golf - Tag ist irreführend.
Trichoplax

3
Es muss eine Begrenzung geben, da Sie mit mehr Bytes eine schneller wachsende Funktion definieren können. Es gibt keinen besonderen Grund für 50, es scheint hoch genug für ein anständiges Wachstum (definitiv besser als das Exponential meines Beispiels) und kreative Lösungen, aber immer noch zu klein für Beklemishevs Wurm oder ein anderes extrem schnelles Wachstum. // Übrigens, danke, dass du meine Tags repariert hast.
EPICI

2
Nur als Hintergrund: Wir versuchen, Mindestpunktzahlen für Codegolf zu vermeiden , aber diese Herausforderung ist nicht Codegolf, und die Anzahl der Bytes ist nicht die Punktzahl. Daher sehe ich absolut kein Problem darin, dass es in diesem Fall ein 50-Byte-Limit gibt.
Trichoplax

1
Info: Ich denke, ich kann diese Antwort von einer anderen Herausforderung "trivial portieren" und eine ähnliche Punktzahl erzielen.
user202729

1
@EPICI Mein früher beschäftigter Biber war schon spurlos, deshalb habe ich versucht, ihn anzupassen.
Jo King

Antworten:


10

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

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

EIN[-[<+>>[-<[->+<]+>>]+<-]>[>]+[<]+<]EIN(m,n)1 - m, m, 1 <n times>mEIN(m,n)

Ich habe das folgende Python-Programm verwendet, um das Verhalten des Programms zu modellieren:

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
Sie können Ihre Punktzahl erhöhen, indem Sie ein Trailing hinzufügen >.
Jonathan Frech

wow, sehr beeindruckend
alan2here
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.