Antecedentes
Una secuencia fractal es una secuencia de enteros donde puede eliminar la primera aparición de cada entero y terminar con la misma secuencia que antes.
Una secuencia muy simple de este tipo se llama paráfrasis de Kimberling . Empiezas con los números naturales positivos:
1, 2, 3, 4, 5, 6, 7, 8, 9, ...
Luego, revuelves algunos espacios en blanco:
1, _, 2, _, 3, _, 4, _, 5, _, 6, _, 7, _, 8, _, 9, ...
Y luego rellena repetidamente los espacios en blanco con la secuencia misma (incluidos los espacios en blanco):
1, 1, 2, _, 3, 2, 4, _, 5, 3, 6, _, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, _, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, 1, 9, ...
Esa es nuestra secuencia fractal! Ahora tomemos las sumas parciales:
1, 2, 4, 5, 8, 10, 14, 15, 20, 23, 29, 31, 38, 42, 50, 51, 60, ...
Pero, ¿qué pasa si iteramos este proceso? "Fractalice" la nueva secuencia (es decir, las sumas parciales obtenidas de los pasos anteriores):
1, _, 2, _, 4, _, 5, _, 8, _, 10, _, 14, _, 15, _, 20, _, 23, ...
1, 1, 2, _, 4, 2, 5, _, 8, 4, 10, _, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, _, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, 1, 20, 8, 23, ...
Y tome nuevamente las sumas parciales:
1, 2, 4, 5, 9, 11, 16, 17, 25, 29, 39, 41, 55, 60, 75, 76, 96, ...
Enjuague, repita. Resulta que este proceso converge. Cada vez que repita este proceso, un prefijo más grande de la secuencia permanecerá fijo. Después de una cantidad infinita de iteraciones, terminaría con OEIS A085765 .
Dato curioso: este proceso convergería a la misma secuencia incluso si no comenzáramos desde los números naturales siempre que la secuencia original comience con 1
. Si la secuencia original comienza con cualquier otra x
, obtendríamos en su x*A085765
lugar.
El reto
Dado un entero positivo N
, genera el N
elemento th de la secuencia convergente.
Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y generando el resultado a través de STDOUT (o la alternativa más cercana), valor de retorno de la función o parámetro de función (out).
Puede elegir si el índice N
está basado en 0 o 1.
Casos de prueba
La secuencia comienza con:
1, 2, 4, 5, 9, 11, 16, 17, 26, 30, 41, 43, 59, 64, 81, 82, 108, 117, 147, 151, 192, 203, 246, 248, 307, 323, 387, 392, 473, 490, 572, 573, 681, 707, 824, 833, 980, 1010, 1161, 1165, 1357, 1398, 1601, 1612, 1858, 1901, 2149, 2151, 2458, 2517
Entonces la entrada 5
debería dar como resultado la salida 9
.
Aquí hay una ingenua implementación de referencia de CJam que genera los primeros N
números (dados N
en STDIN). Tenga en cuenta que su código solo debe devolver el N
elemento th, no el prefijo completo.
N
término de A085765 , ¿correcto?