Castor occupé sans trace


20

Tous ces castors occupés faisaient un vrai gâchis. Ils ont écrit partout sur la bande. À ce rythme, notre voisin cessera de nous prêter des cassettes illimitées.

Nous avons besoin d'une nouvelle façon de jouer au jeu du castor, qui ne ruine pas chaque bande que nous utilisons.

Les règles

Brainfuck seulement. La bande mémoire est illimitée dans les deux sens. L'instruction d'entrée lira toujours , elle peut donc être utilisée pour effacer une valeur.0

Limite source de 50 octets.

A la fin de l'exécution, la mémoire doit être à s.0

Le score est la distance entre l'emplacement de départ du pointeur de mémoire et l'emplacement final - s'il faut instructions de déplacement pour les parcourir, votre score est n . Plus haut c'est mieux. Fournissez une valeur exacte si vous le pouvez, sinon fournissez une estimation.nn

Exemple

32 octets, 22551

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

Explication

-                                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

Cet exemple est destiné à montrer certaines des techniques utilisées pour créer une soumission. Ce n'est pas compétitif pour sa taille.


3
@Okx pas de problème - ce n'était pas une critique. S'il y a une autre façon de noter cela qui autorise une longueur de code arbitraire, il est maintenant temps de la trouver avant que les réponses ne viennent. Je vais redéfinir cela car actuellement le code golf est trompeur
trichoplax

3
Il doit y avoir une certaine limite, car plus d'octets vous permettent de définir une fonction de croissance plus rapide. Il n'y a aucune raison en particulier pour 50, il semble assez élevé pour une croissance décente (certainement meilleure que l'exponentielle de mon exemple) et des solutions créatives mais encore trop petit pour le ver de Beklemishev ou une autre croissance extrêmement rapide. // Merci d'avoir corrigé mes balises au fait, je me suis précipité un peu pour le sortir.
EPICI

2
Juste pour le fond: nous essayons d'éviter les scores minimums pour le golf de code , mais ce défi n'est pas le golf de code, et le nombre d'octets n'est pas le score, donc je ne vois absolument aucun problème avec une limite de 50 octets dans ce cas.
trichoplax

1
Info: Je pense que je peux "porter trivialement" cette réponse d'un autre défi et obtenir un score similaire.
user202729

1
@EPICI Mon castor occupé précédent était déjà sans trace, c'est pourquoi j'essayais de l'adapter.
Jo King

Réponses:


10

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

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

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

J'ai utilisé le programme Python suivant pour modéliser le comportement du programme:

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
Vous pouvez augmenter votre score en ajoutant une fin >.
Jonathan Frech

wow, très impressionnant
alan2here
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.