fundo
Para esse desafio, uma 'metaseqüência' será definida como uma sequência de números em que não apenas os próprios números aumentarão, mas também o incremento, e o incremento aumentará por um valor crescente, etc.
Por exemplo, a metaseqüência de camada 3 começaria 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 <-|
Desafio
Dado um número inteiro positivo, produza os primeiros vinte itens da metaseqüência dessa camada.
Casos de teste
Entrada: 3
Saída:[ 1, 2, 4, 8, 15, 26, 42, 64, 93, 130, 176, 232, 299, 378, 470, 576, 697, 834, 988, 1160 ]
Entrada: 1
Saída:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]
Entrada: 5
Saída:[ 1, 2, 4, 8, 16, 32, 63, 120, 219, 382, 638, 1024, 1586, 2380, 3473, 4944, 6885, 9402, 12616, 16664 ]
Entrada: 13
Saída:[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16383, 32752, 65399, 130238, 258096, 507624 ]
Como você pode perceber, os primeiros itens de cada sequência da camada são os primeiros potências de 2 ...
Regras
- Aplicam-se brechas padrão
- Isso é código-golfe , então a resposta mais curta em bytes ganha
fonte
0
, a camada 2 para entrada1
etc.)?Respostas:
Geléia ,
87 bytesExperimente online!
Isso usa o insight de @ alephalpha de quemeta-sequêncian( i ) = ∑k = 0n( ik) .
fonte
Wolfram Language (Mathematica) , 34 bytes
Experimente online!
A metaseqüência de níveln é a soma dos primeiros n + 1 elementos de cada linha do triângulo Pascal.
fonte
Haskell , 34 bytes
Usa entradas indexadas em 0 (
f 4
retorna a camada 5.)Haskell , 36 bytes
Experimente online! Usa entradas indexadas em 1 (
f 5
retorna a camada 5.)Explicação
scanl (+) 1
é uma função que recebe somas parciais de uma lista, iniciando em (e acrescentando)1
.Acontece que o níveln é apenas essa função aplicada (n−1) vezes à lista [1,2,3,…] .
(Ou equivalente:n vezes a uma lista de todos.)
Usamos um1 cada aplicativo.
init
ou[1..20-n]
para contabilizar o aumento da lista emfonte
[1..20-n]
não vai funcionar paratake 20.(iterate(scanl(+)1)[1..]!!)
custaria apenas um byte a mais para corrigir isso(iterate(init.scanl(+)1)[1..20]!!)
.Brain-Flak ,
8482 bytesExperimente online!
Anotado
Experimente online!
fonte
R , 36 bytes
Experimente online!
Obrigado a @ Giuseppe por sugerir
outer
.Isso se baseia na abordagem descrita por @falphalpha
fonte
Map
vez de externo?Python 2 ,
695855 bytesBytes salvos graças a ovs e Jo King ; também funciona agora em Python 3.
Experimente online!
A matemática
Sejaa ( t,n) o termo nt h (indexado 0) da sequência na camada t . Uma pequena análise leva à seguinte fórmula de recorrência:
Trabalhando para trás, definimosa ( 0 , n ) = 1 e a ( - 1 , n ) = 0 para todos os n . Essas definições simplificarão nosso caso base.
O código
Definimos uma função- 1 deve se comportar como uma sequência constante de todos os 0 0 's.
m(t)
que retorna os 20 primeiros elementos da sequência na camadat
. Set
não for negativo, usamos a fórmula recursiva acima; set
for-1
, retornamos uma lista vazia. A lista vazia funciona como um caso base, porque o resultado de cada chamada recursiva é fatiado ([:n]
) e depois somado. Fatiar uma lista vazia fornece uma lista vazia e somar uma lista vazia fornece0
. Isso é exatamente o resultado que queremos, desde níveisfonte
(t>=0)*range(20)
salva um byte, embora provavelmente haja uma expressão ainda mais curta.if~t
economiza mais dois @xnordzaima / APL REPL, 14 bytes
Experimente online!
fonte
1∘,
→1,
(≢↑(+\1∘,)⍣⎕)20⍴1
-s
sinalizador).-s
btw (a menos que-s
seja sinalizador de repl?)Pari / GP , 39 bytes
Experimente online!
Pari / GP , 40 bytes
Experimente online!
fonte
Perl 6,
3432 bytes-2 bytes thanks to Jo King
Try it online!
Explanation
fonte
$^a
vez de$_
é necessário)$_
is undefined when calling the function. I prefer solutions that don't depend on the state of global variables.Python 3.8 (pre-release), 62 bytes
Try it online!
Explanation
fonte
R (
6347 bytes)Demonstração online . Isso usa a função beta incompleta regularizada, which gives the cumulative distribution function of a binomial, and hence just needs a bit of scaling to give partial sums of rows of Pascal's triangle.
Oitava (
6646 bytes)Demonstração online . Exatamente o mesmo conceito, mas um pouco mais feio porque
betainc
, ao contrário dos R'spbeta
, exige que o segundo e o terceiro argumentos sejam maiores que zero.Muito obrigado a Giuseppe por me ajudar a vetorizá-los, com economias significativas.
fonte
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}
Versão não destruída:
Bastante uso de recursos - a versão online não pode calcular a 13ª metaseqüência.
Experimente online
fonte
Wolfram Language (Mathematica) , 42 bytes
Experimente online!
fonte
JavaScript (Node.js) , 58 bytes
Experimente online!
É trivial escrever seguindo a fórmula recursiva com base na descrição em questãog( t , i ) = { g( t , i - 1 ) + g( t - 1 , i - 1 )1E sei ⋅ t > 0E sei ⋅ t = 0
E você só precisa gerar uma matriz de 20 elementos com [ g( T , 0 ) ... g( t , 19 ) ]
fonte
05AB1E ,
119 bytesIndexado a 0
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
.¥
!R ,
5949 bytesExperimente online!
Recursivamente
Reduce
com+
,init=1
eaccumulation=TRUE
para evitar ter que subconjunto. Agradecemos a Criminally Vulgar por sugerir a abordagem recursiva!fonte
outer
quesapply
para 36 bytescumsum
por um tempo para tentar fazê-lo funcionar, mas issoReduce
é tão liso. É bom poder diminuir o índice por 1 também, não vi isso nos comentários.JavaScript (ES6),
6867 bytesExperimente online!
JavaScript (ES6), 63 bytes
NB: esta versão funciona paran ≤ 20 .
Experimente online!
fonte
J , 24 bytes
Experimente online!
NOTA: Acontece que esta é uma tradução da resposta da APL do dzaima, embora eu não tenha percebido isso antes de escrever isso.
explicação
fonte
Ruby, 49 bytes
Definição recursiva: a camada 0 é
1,1,1,1...
e cada camada subseqüente é 1, seguida por uma sequência cujas primeiras diferenças são a camada anterior. Irritantemente, isso me daria 21 valores se eu não explicitamente separar os 20 primeiros; Parece que deveria haver uma maneira de reduzir isso, evitando isso.fonte
Retina , 59 bytes
Substitua a entrada por 19
1
s (em unário). (O vigésimo valor é 0, porque ele sempre é excluído pela primeira passagem pelo loop.)Repita o loop o número de entrada original várias vezes.
Remova o último elemento e prefixe a
1
.Calcular a soma acumulada.
Converta para decimal.
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 120 bytes
Experimente online!
Baseado na fórmula de alefalpha.
fonte
Ferrugem , 135 bytes
usou a idéia de @alephalpha, como várias outras. não há fatorial embutido, de modo que consuma pelo menos 36 bytes (além de lidar com negativos). nenhuma escolha interna, outros 16 bytes. iterador-> tipo de vetor declarado, 20 bytes .. etc etc.
Ungolfed em play.rust-lang.org
fonte
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). O que seria bom é combinar as duas dobras, mas não tenho certeza de como as tuplas são sucintas.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)Demonstração online
Implementação direta da observação
do OEIS A008949 . Os argumentos para
Reduce
são a função (obviamente), a matriz sobre a qual mapear, o valor inicial, um valor falso (dobrar da esquerda em vez da direita) e um valor verdadeiro para acumular os resultados intermediários em uma matriz.fonte
K (oK) , 17 bytes
-1 byte graças ao ngn (alternando de indexado 0 para indexado 1)
Experimente online!
Indexado 1
K (oK) , 18 bytes
Experimente online!
Indexado a 0
fonte
1+!20
->20#1
Gelatina , 10 bytes
Experimente online!
Indexado a 0.
fonte
Perl 5, 48 bytes
TIO
fonte
Japonês , 15 bytes
Indexado a 0; substituir
h
comp
o 1-indexado.Tente
fonte
CJam (20 bytes)
Demonstração online . Este é um programa que recebe a entrada do stdin e imprime no stdout; para a mesma pontuação, um bloco anônimo (função) pode ser obtido como
Dissecação
Isso aplica a definição literalmente:
fonte