Fondo
Para este desafío, una 'metasecuencia' se definirá como una secuencia de números donde no solo los números aumentarán, sino también el incremento, y el incremento aumentará en un valor creciente, etc.
Por ejemplo, la metasecuencia de nivel 3 comenzaría como:
1 2 4 8 15 26 42 64 93 130 176
porque:
1 2 3 4 5 6 7 8 9 >-|
↓+↑ = 7 | Increases by the amount above each time
1 2 4 7 11 16 22 29 37 46 >-| <-|
| Increases by the amount above each time
1 2 4 8 15 26 42 64 93 130 176 <-|
Reto
Dado un número entero positivo, genera los primeros veinte elementos de la metasecuencia de ese nivel.
Casos de prueba
Entrada: 3
Salida:[ 1, 2, 4, 8, 15, 26, 42, 64, 93, 130, 176, 232, 299, 378, 470, 576, 697, 834, 988, 1160 ]
Entrada: 1
Salida:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]
Entrada: 5
Salida:[ 1, 2, 4, 8, 16, 32, 63, 120, 219, 382, 638, 1024, 1586, 2380, 3473, 4944, 6885, 9402, 12616, 16664 ]
Entrada: 13
Salida:[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16383, 32752, 65399, 130238, 258096, 507624 ]
Como te darás cuenta, los primeros elementos de cada secuencia del nivel son los primeros poderes de 2 ...
Reglas
- Se aplican lagunas estándar
- Este es el código de golf , por lo que la respuesta más corta en bytes gana
fuente
0
, nivel 2 para entrada1
, etc.)?Respuestas:
Jalea ,
87 bytesPruébalo en línea!
Esto utiliza la idea de @ alephalpha de que lametasecuencianorte( i ) = ∑k = 0norte( ik) .
fuente
Wolfram Language (Mathematica) , 34 bytes
Pruébalo en línea!
La metasecuencia de niveln es la suma de los primeros n+1 elementos de cada fila del triángulo de Pascal.
fuente
Haskell , 34 bytes
Utiliza entradas indexadas 0 (
f 4
devuelve el nivel 5)Haskell , 36 bytes
Pruébalo en línea! Utiliza entradas indexadas 1 (
f 5
devuelve el nivel 5)Explicación
scanl (+) 1
es una función que toma sumas parciales de una lista, comenzando desde (y hasta antes)1
.Resulta que el nivelnorte es solo esta función aplicada ( n - 1 ) veces a la lista [ 1 , 2 , 3 , ... ] .
(O equivalente:norte veces a una lista de todos).
Usamos1 cada aplicación.
init
o[1..20-n]
para dar cuenta de que la lista se alarga enfuente
[1..20-n]
no va a funcionar paratake 20.(iterate(scanl(+)1)[1..]!!)
solo costaría un byte más para arreglar eso(iterate(init.scanl(+)1)[1..20]!!)
.Brain-Flak ,
8482 bytesPruébalo en línea!
Anotado
Pruébalo en línea!
fuente
R , 36 bytes
Pruébalo en línea!
Gracias a @Giuseppe por sugerir
outer
.Esto se basa en el enfoque descrito por @alephalpha
fuente
Map
lugar de externo?Python 2 ,
695855 bytesBytes guardados gracias a ovs y Jo King ; Además, ahora también funciona en Python 3.
Pruébalo en línea!
Las matemáticas
Seaa(t,n) el término nth (indexado en 0) de la secuencia en el nivel t . Un pequeño análisis lleva a la siguiente fórmula de recurrencia:
Trabajando hacia atrás, definimosa(0,n)=1 y a(−1,n)=0 para todo n . Estas definiciones simplificarán nuestro caso base.
El código
Definimos una función−1 debería comportarse como una secuencia constante de todos 0 's.
m(t)
que devuelve los primeros 20 elementos de la secuencia en el nivelt
. Sit
no es negativo, usamos la fórmula recursiva anterior; sit
es así-1
, devolvemos una lista vacía. La lista vacía funciona como un caso base porque el resultado de cada llamada recursiva se divide ([:n]
) y luego se suma. Cortar una lista vacía da una lista vacía, y sumar una lista vacía da0
. Eso es exactamente el resultado que queremos, ya nivelfuente
(t>=0)*range(20)
guarda un byte, aunque probablemente haya una expresión aún más corta.if~t
ahorra dos más sobre @xnordzaima / APL REPL, 14 bytes
Pruébalo en línea!
fuente
1∘,
→1,
(≢↑(+\1∘,)⍣⎕)20⍴1
-s
bandera).-s
BTW (a menos que-s
sea el indicador de respuesta?)Pari / GP , 39 bytes
Pruébalo en línea!
Pari / GP , 40 bytes
Pruébalo en línea!
fuente
Perl 6 ,
3432 bytes-2 bytes gracias a Jo King
Pruébalo en línea!
Explicación
fuente
$^a
lugar de$_
es necesario)$_
no está definido al llamar a la función. Prefiero soluciones que no dependen del estado de las variables globales.Python 3.8 (prelanzamiento) , 62 bytes
Pruébalo en línea!
Explicación
fuente
R (
6347 bytes)Demo en línea . Esto utiliza la función beta incompleta regularizada , que proporciona la función de distribución acumulativa de un binomio y, por lo tanto, solo necesita un poco de escala para dar sumas parciales de filas del triángulo de Pascal.
Octava (
6646 bytes)Demo en línea . Exactamente el mismo concepto, pero un poco más feo porque
betainc
, a diferencia de los Rpbeta
, requiere que el segundo y el tercer argumento sean mayores que cero.Muchas gracias a Giuseppe por ayudarme a vectorizarlos, con ahorros significativos.
fuente
Ruby, 74 bytes
a=->b{c=[1];d=0;b==1?c=(1..20).to_a: 19.times{c<<c[d]+(a[b-1])[d];d+=1};c}
Versión sin golf:
Muy intensivo en recursos: la versión en línea no puede calcular la 13ª metasecuencia.
Pruébalo en línea
fuente
Wolfram Language (Mathematica) , 42 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 58 bytes
Pruébalo en línea!
Es trivial escribir la siguiente fórmula recursiva basada en la descripción en cuestión.sol( t , i ) = { g( t , i - 1 ) + g( t - 1 , i - 1 )1Sii ⋅ t > 0Sii ⋅ t = 0
Y solo necesita generar una matriz de 20 elementos con [ g( t , 0 ) ... g( t , 19 ) ]
fuente
05AB1E ,
119 bytes0 indexado
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
.¥
!R ,
5949 bytesPruébalo en línea!
Recursivamente
Reduce
con+
,init=1
yaccumulation=TRUE
para evitar tener que subconjunto. ¡Gracias a Criminally Vulgar por sugerir el enfoque recursivo!fuente
outer
quesapply
para 36 bytescumsum
un tiempo para tratar de hacerlo funcionar, pero esoReduce
es muy hábil. Es bueno poder bajar el índice por 1 también, no lo vi en los comentarios.JavaScript (ES6),
6867 bytesPruébalo en línea!
JavaScript (ES6), 63 bytes
NB: esta versión funciona paran ≤ 20 .
Pruébalo en línea!
fuente
J , 24 bytes
Pruébalo en línea!
NOTA: Resulta que esta es una traducción de la respuesta APL de dzaima, aunque en realidad no me di cuenta antes de escribir esto.
explicación
fuente
Ruby, 49 bytes
Definición recursiva: el nivel 0 es
1,1,1,1...
y cada nivel subsiguiente es 1 seguido de una secuencia cuyas primeras diferencias son el nivel anterior. Molesto, esto me daría 21 valores si no cortara explícitamente los primeros 20; Parece que debería haber una forma de acortar esto evitando eso.fuente
Retina , 59 bytes
Reemplace la entrada con 19
1
s (en unario). (El valor 20 es 0 porque siempre se elimina en el primer paso a través del ciclo).Repita el ciclo el número de entrada original de veces.
Elimine el último elemento y prefijo a
1
.Calcule la suma acumulativa.
Convierte a decimal.
Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 120 bytes
Pruébalo en línea!
Basado en la fórmula de alephalpha.
fuente
Óxido , 135 bytes
usé la idea de @alephalpha, como muchas otras. no hay factorial incorporado, por lo que ocupa al menos 36 bytes (además de tratar con negativos). sin elegir, otros 16 bytes. iterador-> tipo de vector declarado, 20 bytes ... etc. etc.
Sin golf en play.rust-lang.org
fuente
min
:fn t(m:i64)->Vec<i64>{let b=|n,k|(1..=k).fold(1,|a,j|a*(n-j+1)/j);(0..20).map(|i|(0..=m).fold(0,|a,x|a+b(i,x))).collect()}
(122 bytes)fn t(m:i64)->Vec<i64>{(0..20).map(|i|(0..=m).fold(0,|a,x|a+(1..=x).fold(1,|a,j|a*(i-j+1)/j))).collect()}
(104 bytes). Lo que sería bueno es combinar los dos pliegues, pero no estoy seguro de cuán sucintas son las tuplas.fn t(m:i64)->Vec<i64>{(0..20).map(|i|(0..=m).fold((0,1),|a,b|(a.0+a.1,a.1*(b-i)/!b)).0).collect()}
(98 bytes)R (
6059 bytes)Demostración en línea
Implementación directa de la observación
de OEIS A008949 . Los argumentos para
Reduce
son la función (obviamente), la matriz sobre la cual asignar, el valor inicial, un valor falso (doblar desde la izquierda en lugar de la derecha) y un valor verdadero para acumular los resultados intermedios en una matriz.fuente
K (oK) , 17 bytes
-1 byte gracias a ngn (cambio de 0 indexado a 1 indexado)
Pruébalo en línea!
1 indexado
K (oK) , 18 bytes
Pruébalo en línea!
0 indexado
fuente
1+!20
->20#1
Jalea , 10 bytes
Pruébalo en línea!
0 indexado.
fuente
Perl 5, 48 bytes
TIO
fuente
Japt , 15 bytes
0 indexado; reemplazar
h
conp
1 indexado.Intentalo
fuente
CJam (20 bytes)
Demo en línea . Este es un programa que toma datos de stdin e imprime en stdout; para el mismo puntaje se puede obtener un bloque anónimo (función) como
Disección
Esto aplica la definición literalmente:
fuente