Antecedentes
La secuencia 1-2-3-Tribonacci
Imagine por un segundo que podría hacer una secuencia de Fibonacci reemplazando la fórmula de iteración estándar con lo siguiente:
Básicamente, en lugar de sumar los dos últimos para obtener el siguiente, sumas los últimos tres. Esta es la base de la secuencia 1-2-3-Tribonacci.
Criterio de Brown
El Criterio de Brown establece que puede representar cualquier valor entero como una suma de miembros de una secuencia siempre que:
Para todos los
n
mayores de 1,
¿Qué significa esto para el desafío?
Puede describir cualquier número entero positivo como una suma de miembros de la secuencia 1-2-3-Tribonacci formada por las siguientes condiciones iniciales:
Esto se conoce como, para cada valor en esta secuencia, la proporción entre términos nunca es mayor que 2 (la proporción promedia aproximadamente 1.839).
Cómo escribir en este sistema de representación numérica
Digamos que usa una representación little-endian. Alinee a los miembros de la secuencia de la siguiente manera:
1 2 3 6 11 20 37 68
Luego, toma su número para representarlo (para nuestras pruebas, digamos que es 63
) y encuentra los valores de los 1-2-3-Tribonacci dados que suman 63 (¡usando primero los valores más grandes!) . Si el número es parte de la suma, ponga un 1 debajo, 0 si no.
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
Puede hacer esto para cualquier número entero dado, ¡primero verifique que use los valores más grandes debajo de su entrada dada!
Definición (finalmente)
Escriba un programa o función que haga lo siguiente, dada una entrada entera positiva n
(escrita en cualquier base estándar) entre 1 y el valor máximo de su idioma:
- Convierta el valor en la representación numérica definida de 1-2-3-Tribonacci.
- Usando esta representación de tipo binario, y léelo como si fuera binario. Esto significa que los dígitos permanecen iguales, pero lo que significan cambia.
- Tome este número binario y conviértalo en la base del número original.
- Envía o devuelve este nuevo número.
Sin embargo, mientras la salida sea válida, no necesita seguir estos pasos. Si mágicamente encuentra alguna fórmula que es más corta (y matemáticamente equivalente), siéntase libre de usarla.
Ejemplos
Deje que la función f
sea la función descrita por la definición y []
represente los pasos tomados (como little-endian, aunque no debería importar) (no es necesario que siga este proceso, este es solo el proceso descrito):
>>> f(1)
[1]
[1]
[1]
1
>>> f(5)
[5]
[0, 1, 1]
[6]
6
>>> f(63)
[63]
[0, 0, 0, 1, 0, 1, 1]
[104]
104