Permite definir una secuencia de puntero a ser cualquier secuencia tal que a (n) = a ((n-1) - (a (n-1))) forall n mayor que algún número finito. Por ejemplo, si nuestra secuencia comenzó con
3 2 1
Nuestro siguiente término sería 2
, porque a (n-1) = 1 , (n-1) -1 = 1 , a (1) = 2 (este ejemplo es índice cero, sin embargo, no importa qué índice use el cálculo) siempre sea lo mismo). Si repetimos el proceso obtenemos la secuencia infinita
3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2
Tarea
Dado un conjunto inicial de enteros positivos, la secuencia del puntero comienza con ese conjunto.
Tipos de salida
La salida está destinada a ser flexible, si elige escribir una función como su programa puede devolver, ya sea una lista infinita de enteros o una función que indexa la secuencia. Si elige escribir un programa completo, puede generar términos de la secuencia indefinidamente.
También puede optar por tomar dos entradas, la matriz inicial y un índice. Si elige hacer esto, solo necesita mostrar el término de la secuencia en ese índice.
Nunca se le dará una secuencia que requiera indexación antes del comienzo de la secuencia. Por ejemplo, 3
no es una entrada válida porque necesitaría términos antes del 3
para resolver el siguiente término.
Este es el código de golf, por lo que su puntaje será el número de bytes en su programa con un puntaje más bajo mejor.
Casos de prueba
los casos de prueba se truncan por simplicidad
2 1 -> 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 ...
2 3 1 -> 2 3 1 3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 ...
3 3 1 -> 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 ...
4 3 1 -> 4 3 1 3 4 4 3 3 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 ...
Respuestas:
JavaScript (ES6), 25 bytes
Una función anónima que, cuando se llama, crea una función
f
que le da al elemento en un índice dado en la secuencia.Por favor, avíseme si entendí mal algo ...
fuente
f(n)
desde adentrof(n)
. No creo que eso termine nunca, pero no sé JS.n
se baja lo suficientea[n]
, devolverá un valor verdadero, por lo que||
hará un cortocircuito y evitará que se repita infinitamente.n
no baja con cada llamada. Estoy bastante seguro de que sin
es mayor que la longitud dea
usted nunca se detendrá.--n
asignarn
an-1
lo que la siguiente referencia a ella se referirá al decrementon
.--n
disminuyen
, lo que significa quef(--n-f(n))
es lo mismo quef((n-1)-f(n-1))
Casco ,
76 bytesDevuelve una lista infinita. Pruébalo en línea! Tenga en cuenta que TIO tarda un tiempo en truncarse e imprimir el resultado.
Explicación
El operador
¡
tiene varios significados. Aquí estoy usando "construir lista infinita iterando una función que calcula un nuevo elemento de la lista de los existentes". Dada una lista de longitud N , el nuevo elemento tendrá un índice basado en 1 N + 1 . Todo lo que necesitamos hacer es negar el último elemento de la lista (que es el valor anterior) e indexar en la lista usando el resultado.fuente
Haskell , 36 bytes
Toma una lista y devuelve una función que indexa la secuencia
Pruébalo en línea!
Explicación
Aquí estamos definiendo una función
!
que toma una listal
y un índicen
. Sin
es menor que la longitud del
que el índicel
den
, si no volvemosl!((n-1)-l!(n-1))
. Esto sigue la definición recursiva de la función que le di en la pregunta.Aquí está el mismo programa sin golf.
Lo uso en
e<-n-1
lugar de lo contrario para guardar bytes mientras lo asignon-1
parae
que pueda usarse más tarde.fuente
MATL ,
139 bytesEmite los términos iniciales seguidos de n términos adicionales (permitidos por el desafío), donde n es un entero positivo tomado como entrada.
Pruébalo en línea!
Explicación
fuente
Mathematica, 63 bytes
toma dos entradas
Pruébalo en línea!
-3 bytes de Martin Ender
fuente
R , 55 bytes
Pruébalo en línea!
Toma dos entradas.
fuente
ML estándar (MLton) , 58 bytes
Pruébalo en línea! La función
a
toma la lista inicial y un índice y devuelve el elemento de secuencia en ese índice. Ejemplo de uso:a [4,3,1] 5
rendimientos4
.fuente
Jalea , 6 bytes
Toma una secuencia S y un número entero k , y añade k términos para S .
Pruébalo en línea!
Cómo funciona
fuente
Python 2 , 48 bytes
Pruébalo en línea!
fuente
CJam, 10 bytes
Para CJam, esto funciona muy bien (¡incluso supera a 05ab1e!).
Este es un bloque anónimo que espera entrada en el formulario
i n
en la pila, dondei
está el índice en la secuencia yn
es una matriz de números iniciales.La razón por la que esto funciona tan bien es por el
j
operador, que proporciona una recursión memorable de un conjunto de valores iniciales.Explicación:
fuente
Java (8), 60 bytes
Toma dos entradas (integer-array
a
e integern
) y genera eln
'valor de la secuencia.Explicación:
Pruébalo aquí. (Puede tomar unos segundos)
fuente
Perl, 38 +3 (-anl) bytes
Pruébalo en línea
fuente
05AB1E , 20 bytes
Espera la entrada como una cadena separada por espacios, sigue produciendo indefinidamente; implementación bastante sencilla
Ejemplo de ejecución:
fuente
Java (OpenJDK 8) ,
95939190 bytesPruébalo en línea!
fuente
b[(j-1)-...]
equivalente ab[~-j-...]
?j>=a.length
quej<a.length
para salvar un byte:j<a.length?a[j]:b[~-j-b[j-1]]
. También tengo curiosidad: ¿por qué elegiste un enfoque de bucle, cuando el enfoque recursivo que también se explica en la descripción del desafío en sí es de solo 60 bytes?Perl 5 ,
-a
30 bytesPruébalo en línea!
fuente