Quase todo mundo aqui está familiarizado com o Triângulo de Pascal. É formado por linhas sucessivas, onde cada elemento é a soma de seus dois vizinhos superior esquerdo e superior direito. Aqui estão as primeiras 5
linhas (emprestadas do triângulo de Generate Pascal ):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Nós vamos pegar o Triângulo de Pascal e realizar algumas somas (hah-ha). Para uma determinada entrada n
, imprima a soma colunar das primeiras n
linhas do triângulo de Pascal. Por exemplo, para entrada 5
, a saída seria formada por
1
1 1
1 2 1
1 3 3 1
[+] 1 4 6 4 1
----------------------
1 1 5 4 9 4 5 1 1
Então a saída seria [1, 1, 5, 4, 9, 4, 5, 1, 1]
.
Observe que você não precisa necessariamente gerar o Triângulo de Pascal para calcular a soma - isso depende de sua implementação, se for mais curto para fazer isso ou não.
Entrada
Um número inteiro positivo único n
com n >= 1
em qualquer formato conveniente .
Saída
A matriz / lista resultante do somatório em n
colunas das primeiras linhas do triângulo de Pascal, conforme descrito acima. Mais uma vez, em qualquer formato adequado.
Regras
- Novas linhas à esquerda ou à direita ou espaços em branco são opcionais, desde que os caracteres sejam alinhados corretamente.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Exemplos
[input]
[output]
1
[1]
2
[1, 1, 1]
3
[1, 1, 3, 1, 1]
5
[1, 1, 5, 4, 9, 4, 5, 1, 1]
11
[1, 1, 11, 10, 54, 44, 155, 111, 286, 175, 351, 175, 286, 111, 155, 44, 54, 10, 11, 1, 1]
fonte
CJam ,
322524 bytesAgradecemos a Luis Mendo por economizar 1 byte.
Experimente online!
Explicação
fonte
JavaScript (ES6), 83 bytes
A indexação 1 me custou um byte. Explicação:
g(j-1,i-1)+g(j-1,i+1)
calcula recursivamente o triângulo de Pascal até atingir a primeira linha, que é o caso base. Para obter somas de coluna, eu uso o fato de quemap
realmente passa um terceiro parâmetro, para que exista uma etapa recursiva extra quando esse for o caso.fonte
JavaScript (ES6),
9087868482 bytesEconomizou 3 bytes graças a ETHproductions
Casos de teste
Mostrar snippet de código
fonte
Mathematica,
5957 bytesAgradecemos a Martin Ender por obter uma economia de dois bytes!
Função pura, recebendo uma entrada inteira positiva e retornando uma lista de números inteiros. Produz literalmente todas as entradas relevantes do triângulo de Pascal e as soma adequadamente.
Submissão anterior (que é um pouco mais fácil de ler):
fonte
Oitava ,
846745 bytes22 bytes salvos graças ao Neil !
Experimente online!
Explicação
A
pascal
função fornece uma matriz que contém os valores no triângulo Pascal:Para extrair os valores desejados, invertemos verticalmente (
flip
), mantemos a parte triangular inferior (tril
) e invertemos novamente. Isto dáspdiags
então extrai as diagonais como colunase
sum
calcula a soma de cada coluna, que fornece o resultado.fonte
@(n)sum(spdiags(flip(tril(flip(pascal(n))))))
?05AB1E ,
3432282524 bytes-4 graças a Emigna.
Experimente online!
Basicamente, tudo o que faz é gerar isso:
Transponha:
Em seguida, soma cada linha:
Se um 0 inicial e um final não for aceitável,
®>-Å
não o®-Å
conserte, com uma penalidade de +1 byte.Resultado para
50
:fonte
-Å0
em vez de>-Ý0*
deve funcionar e€
não é necessário no final.>F
pode serƒ
.Å
, inteligente! Eu continuei "ctrl + f" para "lista de identidade" ou algo parecido nainfo.txt
heh ...13 x 5
para5 x 11
? Para onde foram as outras duas colunas / linhas?PHP , 119 bytes
números de colunas de 1 entrada a entrada -1
Experimente online!
fonte
array_column
é uma nova função nesta versãoarray_column()
.$x=2*$j++-$i
salva 7 bytes. Fazer um loop de $ j para baixo em vez de para cima pode salvar 1 (for($j=$i+1;$j--;)
). E mais 3 bytes podem ser jogados na saída.array_column
Gelatina , 12 bytes
Experimente online!
Como funciona
fonte
Python 3,
201184 bytesfonte
Python 2 ,
140137 bytesExperimente online! ou Experimente online!
Para
n=3
Inicia com uma lista com
n
zeros entre um -[[0, 0, 0, 1, 0, 0, 0]]
Gere a pirâmide completa
Gire 90º e some cada linha, descartando a primeira e a última (somente zeros)
fonte
Haskell,
118112104 bytes614 bytes salvos graças a @nimifonte
#
parar#n|d<-0<$[1..n]=d++r++d
.#
, porque não é mais recursivo: definaf
comof n=foldl1 z[d++p x++d|x<-[1..n],d<-[0<$[1..n-x]]]
e despejo#
.Python 3, 124 caracteres
Isso usa o fato de que o triângulo de Pascal pode ser definido com coeficientes binomiais. Eu tentei remover o
abs(x)
erange(-n+1,n)
fazendo-orange(n)
e, em seguida, usandolambda l:l[-1:0:-1]+l
, mas foi mais.Também esta é minha primeira vez jogando golfe, então espero que você perdoe qualquer faux-pas.
O binômio não é meu e foi tirado daqui .
fonte