Pregunta

Como programa de depuración/prueba para mi implementación Brainf*CK, he creado el siguiente bucle de conteo:

+[[>+]+]

Con un solo byte, células de envoltura y con células 30K con envoltura, esto crea un bucle de conteo infinito. Establece cada celda en 1, luego cada celda a 2, etc.

Mi problema es que, cuando llega a 255, el bucle interno incrementa la celda a 0, y luego el bucle exterior lo incrementa a 1 inmediatamente. Esto actúa como un 'doble paso' cuando se desborda, en lugar de un solo paso. Esta es la única forma en que podría obtener el ciclo para continuar infinitamente con este programa apretado.

El recuento de cada celda va 0 -> 1 -> 2 ... 254 -> 255 -> 1 ...

Mientras me gustaría que se fuera 0 -> 1 -> 2 ... 254 -> 255 -> 0 -> 1 ...

Es difícil continuar con un bucle cuando la celda actual es cero. He jugado con variaciones sobre el mismo tema, pero ninguno de ellos lo hace bien.

Este programa en particular es solo un programa de conteo trivial para las pruebas, pero lo que realmente me ayudará con futuros programas es saber cómo invertir el condicional de bucle como si necesito hacer que este bucle de conteo funcione.

¿Fue útil?

Solución

Probar:

+[[>+]>[+>]+]

Después del primer bucle interno, sabemos que los datos son 0 seguidos de un montón de 255. Muévase a la siguiente celda y incremélos a todos hasta que volvamos al comienzo. Luego incrementa la primera celda y comience por todas partes.

Otros consejos

Otra posibilidad que consideré anoche, aunque es un poco diferente a sus requisitos:

-[[-]>-]

Es del mismo tamaño que su original, pero cuenta hacia abajo. Cumera cada célula de 255 a cero, pero solo modifica una celda a la vez. Pensé que lo agregaría, ya que es un bucle interesante y corto que puedes usar para probar.

Por supuesto, puede hacer que cualquiera de estos bucles se cuente arriba o abajo exclusivamente usando solo + o solo -.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top