La secuencia de Collatz a partir de un entero positivo n se define de esta manera:
- si n es par, divídalo por 2 (
n' = n / 2
) - si n es impar, multiplíquelo por 3 y agregue 1 (
n' = 3n + 1
)
Repita la iteración anterior hasta que n alcance 1.
No se sabe (es un problema importante no resuelto en teoría de números) si la secuencia finalmente alcanzará el número 1, independientemente de qué número entero positivo se elija inicialmente.
Una máquina de dos contadores (2CM) es una máquina equipada con dos registros que pueden contener un valor entero no negativo y pueden programarse con el siguiente conjunto de instrucciones:
INCX increase the value of register X
INCY increase the value of register Y
JMP n jump to instruction n
DJZX n if register X is zero jump to instruction n,
otherwise decrement its value
DJZY n if register Y is zero jump to instruction n,
otherwise decrement its value
HALT halt (and accept)
PRINTX print the content of register X
Un programa de 2CM es simplemente una secuencia de instrucciones, por ejemplo, el siguiente programa simplemente copia el contenido del registro X para registrar Y:
cp: DJZX end
INCY
JMP cp
end: HALT
Tenga en cuenta que un 2CM es Turing completo (es decir, puede calcular todas las funciones computables con una codificación de entrada adecuada, pero aquí es irrelevante). También tenga en cuenta que el conjunto de instrucciones es un poco diferente al del artículo de Wikipedia.
El reto
Escriba el programa 2CM más corto, que calcule e imprima la secuencia de collatz hasta 1 y se detenga (el registro X inicialmente contiene el valor inicial n
y el registro Y inicialmente contiene 0). Tenga en cuenta que la longitud de un programa de 2CM es la cantidad de instrucciones utilizadas (no la longitud del texto).
Por ejemplo, cuando se inicia desde X = 3, debe imprimir: 3 10 5 16 8 4 2 1
y HALT.
Por lo tanto, puede usar su idioma favorito para construir un simulador / intérprete de 2CM, pero el código final (más corto) que ingrese en la respuesta debe estar en el idioma de 2CM .