Reto
Escriba una función / programa que genere el n
'elemento th, o los primeros n
elementos, en la secuencia numérica bien conocida:
1, 2, 4, 8, 16 ...
Oh, espera ... olvidé los primeros números:
1, 1, 1, 1, 2, 4, 8, 16 ...
Heck, agregaré algunos más por si acaso:
1, 1, 1, 1, 2, 4, 8, 16, 33, 69, 146, 312, 673, 1463, 3202, 7050, 15605, 34705 ...
Los números son números catalanes generalizados dados por la fórmula (indexado a cero):
dónde
Este es OEIS A004149 .
Puede elegir si desea tener la secuencia de índice cero o uno indexado. La secuencia, por supuesto, debe ser la misma, por lo que debe reescribir la fórmula si la tiene un índice.
a(n-1-k)
aa(n-k)
, ¿correcto?Respuestas:
Python , 51 bytes
Pruébalo en línea!
Simplifica un poco la fórmula:
fuente
Perl 6 , 44 bytes
Pruébalo en línea!
Bloque de código anónimo que devuelve una secuencia infinita de valores perezosa. Esto prácticamente implementa la secuencia como se describe, con el acceso directo que comprime multiplica todos los elementos hasta ahora después del segundo elemento con el reverso de la lista comenzando desde el cuarto elemento y agregando un extra
1
al final.Explicación:
fuente
05AB1E ,
141311 bytesPruébalo en línea!
Emite el enésimo elemento, indexado a 0.
fuente
JavaScript (ES6), 42 bytes
Un puerto de la solución de xnor .
0 indexado.
Pruébalo en línea!
JavaScript (ES6),
8375 bytesUna solución más rápida, menos recursiva, pero significativamente más larga.
0 indexado.
Pruébalo en línea!
fuente
Haskell,
494339 bytesPruébalo en línea!
Para
n<3
elsum
es 0, entonces lomax ... 1
eleva a1
.Editar: -6 bytes gracias a @Jo King.
fuente
Wolfram Language (Mathematica) , 36 bytes
Pruébalo en línea!
1 indexado.
La secuencia 2-indexada es de 4 bytes más corto:
Sum[#0@i#0[#-i],{i,#-4}]/. 0->1&
. Pruébalo en línea!fuente
CatalanNumber
!05AB1E ,
1713 bytesNo más corto que la respuesta 05AB1E existente , pero quería probar la funcionalidad recursiva de la nueva versión 05AB1E como práctica para mí.
Quizás podría jugarse unos pocos bytes.EDIT: Y de hecho puede, ver la versión recursiva de @Grimy respuesta 05AB1E 's de abajo, que es 13 bytes .£
è
£
Explicación:
Versión de 13 bytes de @Grimy (¡asegúrate de votar su respuesta si aún no lo has hecho!):
1λèλ1šÂ¨¨¨øPO
λλ1šÂ¨¨¨øPO
Explicación:
fuente
n=100
en 0,65 segundos , pero cuando desactivo perezoso de carga, que se apaga después de 60 segundos en lugar, incluso paran=25
.Python 3 , 59 bytes
realmente ineficiente,
a(13)
no termina en TIO.Pruébalo en línea!
fuente
Jalea , 17 bytes
Pruébalo en línea!
fuente
Haskell , 76 bytes
Pruébalo en línea!
fuente
APL (Dyalog Extended) , SBCS de 34 bytes
-2 gracias a dzaima.
Prefijo anónimo lambda.
Pruébalo en línea!
fuente
Japt ,
191716 bytesEmite el
n
término th, 1-indexado.Intentalo
fuente
Haskell , 65 bytes
Pruébalo en línea!
Puede usar
f
para obtener un solo elemento de una secuencia, o pasar una lista de valoresg
y obtener todos los índices para esa lista.fuente
Adelante (gforth) ,
9981 bytesPruébalo en línea!
La salida es el enésimo término y la entrada está indexada en 1
Editar: ahorró 17 bytes cambiando a la fórmula de xnor. Se guardó otro 1 byte usando 1 indexado
Explicación del Código
fuente
Carbón , 26 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Imprime el enésimo número indexado en 0, aunque calcula utilizando la indexación 1 internamente. Explicación:
Comenzar con
a[0] = a[1] = a[2] = a[3] = a[4] = 1
. Sí, esto está indexado en 1, pero luego con un valor cero adicional. Eso es código golf para ti.Calcular unos
n
términos adicionales . Esto es excesivo, pero hace que encontrar el término deseado sea más fácil cuandon<5
.Para cada término, calcule el siguiente término como la suma de los términos hasta el momento multiplicados por el reverso de los términos hasta el momento, excluyendo tres términos.
Este es un no-op utilizado para engañar a Charcoal para que analice la forma de 2 argumentos
Slice
, de lo contrario tendría que usar una forma menos golfosa de eliminar tres términos.Salida del 4to último término.
fuente
Pyth , 30 bytes
Pruébalo en línea!
<
@
fuente
Ruby ,
4241 bytesPruébalo en línea!
1 indexado (para guardar 1 byte)
fuente
Octava , 73 bytes
Pruébalo en línea!
-2 bytes gracias a Stewie Griffin. Una vez más, el enfoque imperativo gana al enfoque recursivo funcional. Ese se muestra a continuación.
Octava , 75 bytes
Pruébalo en línea!
Captcha quería verificar que era humano cuando publicaba esto. Para ser honesto, no estoy tan seguro .
fuente
n<4
.Perl 5
-MList::Util=sum
, 61 bytesPruébalo en línea!
fuente
C / C ++ ,
706967 bytes-1 bytes gracias a Jonathan.
Pruébalo en línea!
fuente
a(n-1-k)
sera(n+~k)
?a(++k)*a(n-k)
Es probable que @JonathanFrech incluso funcione, y deja caer otros 2 bytesfor
. Pero huelo un comportamiento indefinido.