Esto no es muy conocido, pero lo que llamamos la secuencia de Fibonacci, también conocida como
1, 1, 2, 3, 5, 8, 13, 21, 34...
en realidad se llama la secuencia de Duonacci . Esto se debe a que para obtener el siguiente número, sumas los 2 números anteriores. También está la secuencia Tribonacci ,
1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201...
porque el siguiente número es la suma de los 3 números anteriores. Y la secuencia de Quadronacci
1, 1, 1, 1, 4, 7, 13, 25, 49, 94, 181, 349, 673...
Y la favorita de todos, la secuencia de Pentanacci :
1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129...
Y la secuencia de Hexanacci , la secuencia de Septanacci , la secuencia de Octonacci , y así sucesivamente hasta la secuencia de N-Bonacci.
La secuencia de N-bonacci siempre comenzará con N 1 seguidos.
El reto
Debe escribir una función o programa que tome dos números N y X , e imprima los primeros números X N-Bonacci. N será un número entero mayor que 0, y puede asumir con seguridad que ningún número de N-Bonacci excederá el tipo de número predeterminado en su idioma. La salida puede estar en cualquier formato legible por humanos, y puede tomar la entrada de cualquier manera razonable. (Argumentos de línea de comando, argumentos de función, STDIN, etc.)
Como de costumbre, este es Code-golf, por lo que se aplican las lagunas estándar y gana la respuesta más corta en bytes.
Muestra IO
#n, x, output
3, 8 --> 1, 1, 1, 3, 5, 9, 17, 31
7, 13 --> 1, 1, 1, 1, 1, 1, 1, 7, 13, 25, 49, 97, 193
1, 20 --> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
30, 4 --> 1, 1, 1, 1 //Since the first 30 are all 1's
5, 11 --> 1, 1, 1, 1, 1, 5, 9, 17, 33, 65, 129
1, 1, 2, 4, 7
como la tercera posición0 + 1 + 1
? ... y uno con los otros?Respuestas:
Boolfuck, 6 bytes
El tipo de número predeterminado en Boolfuck es un poco. Suponiendo que esto también se extiende a los números de entrada N y X, y dado que N> 0, solo hay dos entradas posibles: 10 (que no genera nada) y 11 (que genera 1).
,
lee un poco en la ubicación de memoria actual. N se ignora como debe ser 1. Si X es 0,[]
se omite el cuerpo del bucle (rodeado por ). Si X es 1, se emite y luego se voltea a 0 para que el ciclo no se repita.fuente
Python 2, 79 bytes
Pruébalo en línea
fuente
exec"v=[sum(f[i-n:]),1][i<n];f+=[v];print v;i+=1;"*x
Pyth, 13
Banco de pruebas
Toma entrada nueva línea separada, con
n
primero.Explicación:
fuente
Haskell, 56 bytes
Ejemplo de uso:
3 # 8
->[1,1,1,3,5,9,17,31]
.Cómo funciona
fuente
tail l
lugar deinit l
?n
elementos en la lista. No hay diferencia entre eliminar desde el final y agregar al frente y viceversa, es decir, eliminar desde el frente y agregar al final, porque la lista inicial está compuesta solo por1
s.++[]
por:
!Python 2, 55 bytes
Rastrea una
n
ventana de longitud de la secuencia en la listal
, actualizada agregando la suma y eliminando el primer elemento. Imprime el primer elemento cada iteración parax
iteraciones.Un enfoque diferente de almacenar todos los elementos y sumar los últimos
n
valores dio la misma longitud (55).fuente
Javascript ES6 / ES2015,
107978580 bytesGracias a @ user81655, @Neil y @ETHproductions por guardar algunos bytes
pruébalo en línea
Casos de prueba:
fuente
for
siempre es mejor quewhile
,x.split('')
->[...x]
,~~a
->+a
,n-=1
->n--
, si encierra todo el cuerpo de la funcióneval
y no necesita escribirreturn
. También, incluso más corto que[...'1'.repeat(i)]
esArray(i).fill(1)
y puede quitar el~~
dea
yb
. Y puedes eliminar elf=
.(i,n)=>eval("for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));l")
. Cambié el orden de las declaraciones, combiné los argumentosn--
enn-i
yl
los eliminé para guardar algunos bytes adicionales.eval
ahorro;(i,n)=>{for(l=Array(i).fill(1);n-->i;)l.push(l.slice(-i).reduce((a,b)=>a+b));return l}
sigue siendo 85 bytes.l.slice(-i).reduce((a,b)=>a+b)
=>eval(l.slice(-i).join`+`)
ES6, 66 bytes
Lamentablemente
map
, no le permitirá acceder a la matriz de resultados en la devolución de llamada.fuente
Jalea, 12 bytes
Pruébalo en línea!
Cómo funciona
fuente
C ++ 11, 360 bytes
Hola, me gusta esta pregunta. Sé que C ++ es un lenguaje muy difícil para ganar esta competencia. Pero arrojaré un centavo de cualquier manera.
Dejaré esto como la explicación legible del código anterior.
fuente
int
s, elimine elint
. Si se llama a alguna funciónfoo
, llámelaf
. Sé brutal ignore el estándar y explote el compilador. Así es como juegas al golf.Haskell , 47 bytes
Pruébalo en línea!
<$
podría haberse introducido en Prelude después de publicar este desafío.Haskell , 53 bytes
Pruébalo en línea!
Define la función binaria
?
, utilizada como3?8 == [1,1,1,3,5,9,17,31]
.La función auxiliar
%
encuentra recursivamente eli
elemento th de lan
secuencia -bonacci sumando losn
valores anteriores . Luego, la función?
tabula los primerosx
valores de%
.fuente
%
"?i<=n
eni>n
.APL, 21
Esta es una función que toma n como argumento izquierdo y x como argumento derecho.
Explicación:
Casos de prueba:
fuente
Pitón 3, 59
Ahorró 20 bytes gracias a FryAmTheEggman.
No es una gran solución, pero funcionará por ahora.
Además, aquí hay casos de prueba:
fuente
Java, 82 + 58 = 140 bytes
Función para encontrar el número i- n - bonacci ( 82 bytes ):
Función para imprimir el primer número k n -bonacci ( 58 bytes ):
fuente
Cerebro-Flak ,
144124122 bytes-20 bytes gracias a Nitroden
Esta es mi primera respuesta Brain-Flak, y estoy seguro de que se puede mejorar. Cualquier ayuda es apreciada.
Pruébalo en línea!
fuente
Pari / GP , 46 bytes
La función generadora de la secuencia es:
Pruébalo en línea!
fuente
Julia, 78 bytes
Esta es una función que acepta dos enteros y devuelve una matriz de enteros. El enfoque es simple: genere una matriz de unos de longitud
n
, luego aumente la matriz agregando la suma de losn
elementos anteriores hasta que la matriz tenga longitudx
.Sin golf:
fuente
MATL , 22
26bytesEsto usa la versión actual (10.2.1) del lenguaje / compilador.
Pruébalo en línea!
Algunos bytes adicionales :-( debido a un error en la
G
función (pegar entrada; ahora corregido para la próxima versión)Explicación
fuente
Perl 6 , 38 bytes
Uso:
fuente
C, 132 bytes
El enfoque recursivo es más corto en un par de bytes.
Sin golf
fuente
Casco , 9 bytes
Pruébalo en línea!
Comienza desde el
B
ase-1
representación de N (simplemente una lista de N unos) y¡
teratively sumas (Σ
) los últimos (↑_
) N elementos y añade el resultado a la lista. Finalmente, toma (↑
) los primeros números X en esta lista y los devuelve.fuente
Ruby , 41 bytes
Pruébalo en línea!
fuente
R , 68 bytes
Pruébalo en línea!
fuente
K (ngn / k) ,
2624 bytesPruébalo en línea!
fuente
Perl 6,
52 ~ 7247 ~ 67 bytesRequiere el módulo
MONKEY-SEE-NO-EVAL
, debido al siguiente error:fuente
PHP , 78 bytes
Pruébalo en línea!
-4 Bytes usando PHP> = 7.1 en
[,$n,$x]
lugar delist(,$n,$x)
fuente
Jq 1.5 , 67 bytes
Asume la entrada proporcionada por N y X, por ejemplo
Expandido
Pruébalo en línea!
fuente
J, 31 bytes
Sin golf:
explicación
Momentos divertidos con el verbo power en su forma gerundia :
Desglose en detalle:
] {. ...
Tome los primeros<right arg>
elementos de todo esto a la derecha que hace el trabajo ...<left> ^: <right>
aplique el verbo<left>
varias<right>
veces ... donde<right>
está especificado por el gerundio medio en(-@[
](1 #~ [)
, es decir]
, es decir, el argumento derecho pasó a la función misma. Entonces que es<left>
? ...(] , [: +/ [ {. ])
El argumento de la izquierda a la totalidad de esta frase se transforma primero por el primer gerundio, es decir,-@[
. Eso significa que el argumento izquierdo de esta frase es el negativo del argumento izquierdo de la función general. Esto es necesario para que la frase[ {. ]
tome los últimos elementos de la lista de retorno que estamos construyendo. Los que se suman entonces:+/
. Y finalmente anexado a la misma lista de regreso:] ,
.(1 #~ [)
- repita 1 número de "argumento izquierdo" varias veces.Pruébalo en línea!
fuente
Mathematica, 59 bytes
Probablemente querrá
Clear@f
entre llamadas a funciones. Los argumentos sonn,x
, al igual que los casos de prueba.fuente
Ordenado , 36 bytes
Pruébalo en línea!
Explicación
fuente
Japt , 18 bytes
Pruébalo en línea!
Explicación:
fuente