O triângulo de Pascal é gerado começando 1
e tendo cada linha formada a partir de adições sucessivas. Aqui, em vez disso, vamos formar um triângulo alternando multiplicação e adição.
Começamos a remar 1
com apenas um solitário 1
. Posteriormente, a adição é feita nas linhas ímpares e a multiplicação é feita nas linhas pares (indexadas 1). Ao executar a etapa de adição, assuma que os espaços fora do triângulo sejam preenchidos com 0
s. Ao executar a etapa de multiplicação, suponha que o exterior esteja preenchido com 1
s.
Aqui está o triângulo completo até 7 linhas. O *
ou +
à esquerda mostra qual etapa foi executada para gerar essa linha.
1 1
2 * 1 1
3 + 1 2 1
4 * 1 2 2 1
5 + 1 3 4 3 1
6 * 1 3 12 12 3 1
7 + 1 4 15 24 15 4 1
Desafio
Dada a entrada n
, imprima a n
linha th deste triângulo.
Regras
- Em vez disso, você pode optar por indexar 0, mas saiba que as linhas de adição e multiplicação devem ser invertidas, para que o mesmo triângulo seja gerado exatamente como acima. Por favor, indique no seu envio se você optar por fazer isso.
- Pode-se presumir que a entrada e a saída se encaixam no tipo inteiro nativo do seu idioma.
- A entrada e saída podem ser fornecidas em qualquer formato conveniente .
- 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
Mostrando dois exemplos possíveis de saída de muitos: uma lista ou uma sequência separada por espaço.
4
[1, 2, 2, 1]
8
"1 4 60 360 360 60 4 1"
fonte
n
quinta linha.Respostas:
Pascal ,
249247233 bytesBem, este é o triângulo alternado de Pascal .
1 byte economizado graças a @ Mr.Xcoder
Experimente online!
fonte
Python 2 ,
9793868178 bytes-4 bytes graças a Rod. -10 bytes graças a Halvard Hummel.
Indexado a 0.
Experimente online!
fonte
map([int.__add__ ,int.__mul__][i%2],[i%2]+a,a+[i%2])
deve funcionar (não testado)Geléia ,
1712 bytesEste é um programa completo (ou link niládico) que recebe a entrada do STDIN.
Experimente online!
Como funciona
fonte
Python 2 ,
96 8987 bytes2 bytes Obrigado ao Sr. Xcoder:
s=[1]
Um pouco diferente da resposta totalmente humana
Experimente online!
fonte
[1]
.CJam , 25 bytes
Indexado a 0.
Experimente online!
Explicação
Este é um bloco anônimo que pega o número da pilha e deixa o resultado na pilha.
fonte
2%!
deve pressionar 1 se for par e 0 se for estranho, não?Mathematica, 92 bytes
Experimente online! (para trabalhar em matemática, "Tr" é substituído por "Total")
fonte
Haskell ,
7672 bytesSolução 0-indexada:
Experimente online!
Explicação
p
recursivamente define o triângulo alternado, a caixa base / primeiro elemento dele é[1]
Em seguida, constrói o triângulo pegando a linha anterior (
l
). Para saber o que fazer com isso, precisamos acompanhar o operador correto (o
) e o elemento neutro correspondente (e
):A partir disso, construa a nova linha duplicando a linha e, para uma cópia, anexamos o elemento neutro, compactamos com o operador e anexamos 1:
fonte
R ,
10898 bytes-10 bytes, substituindo o sinal de multiplicação real por um sinal de adição. Por favor me perdoe.
Experimente online!
Bastante satisfeito com o método geral (pela primeira vez, aliasmente um primitivo), mas tenho certeza de que ainda há golfe a ser feito, especialmente com o manuseio desajeitado dos casos em que n <3, o que leva a muitos clichês.
fonte
`*`=`+`
! bastante inteligente. O resto dos meus melhorias são apenas técnicas de golfe padrão, que eu ficaria feliz em explicar a seu pedido :)n<3
Casca ,
1716 bytesExperimente online!
Uma solução indexada em 1.
Explicação
A primeira linha é a função principal, que chama a função auxiliar na segunda linha. A função auxiliar geralmente é chamada com
₁
, mas, neste caso, estou usando o recurso de etiquetas transbordantes do Husk: se você se referir a uma linha N em um programa com M <N linhas, você obtém a linha N mod M com a função modificadora M / N aplicado a ele. A segunda função modificadora éflip
, então estou usando₅
para inverter os argumentos da função auxiliar sem nenhum custo adicional de bytes.Aqui está a função auxiliar.
Aqui está a função principal.
fonte
C # (.NET Core) ,
143134128 bytes-4 bytes graças a Phaeze
-5 bytes graças a Zac Faragher
-6 bytes graças a Kevin Cruijssen
Experimente online!
Explicação:
fonte
var b=new[]{1};
e o compilador determinará o tipo de array para você.int[]b={1};
- 11 bytes vs 20 como é ou 16 como na sugestão de @Phaezen=>{int[]b={1},c;for(int i=0,j;++i<n;b=c)for(c=new int[i+1],c[0]=c[i]=1,j=0;++j<i;)c[j]=i%2<1?b[j-1]+b[j]:b[j-1]*b[j];return b;}
. Eu combineic
assimint[]b={1},c;
; encurtadoi%2==0
parai%2<1
; E removeu os suportes do loop colocando tudo dentro.Python 2 , 83 bytes
Dê um pouco de amor ao
exec
índice 0
Experimente online!
fonte
Pitão , 22 bytes
Economizou toneladas de byte graças a @FryAmTheEggman ! A solução inicial está abaixo.
Conjunto completo de testes (indexado 0).
Pyth ,
40 38 3635 bytesIsso parece
muitorazoável. Sugestões são bem vindas.Test Suite ou Experimente online!
fonte
u
(mas não consegui descobrir). Obrigado!J , 32 bytes
Experimente online!
fonte
Perl 5 , 111 + 2 (-na) = 113 bytes
Experimente online!
fonte
Mathematica, 70 bytes
Experimente no sandbox Wolfram ! Infelizmente não funciona em matemática. É 0 indexado.
Explicação:
Partition[#,2,1,{-1,1},{}]
pega uma lista e retorna todas as sublistas de dois elementos, além de listas de 1 elemento para o início e o fim - por exemplo,{1,2,3,4}
se torna{{1}, {1,2}, {2,3}, {3,4}, {4}}
.PadRight[{},#,{1##&,Plus}]
faz uma lista alternada de1##&
(efetivamenteTimes
) ePlus
, cujo comprimento é o número de entrada. Em seguida,Fold
aplica repetidamente a função de partição com osPlus
es eTimes
es aplicados a ela, para criar as linhas do triângulo.fonte
Ruby ,
8382 bytesExperimente online!
Este é o índice 0.
fonte
Raquete , 116 bytes
Experimente online!
fonte
TI-Basic (TI-84 Plus CE), 100 bytes
Indexado em 1, solicita a entrada do usuário e imprime uma lista contendo o
n
linha th do Triângulo Alternativo de Pascal.Durante o loop: L M é a linha atual e L L é a linha anterior.
TI-Basic é uma linguagem tokenizada . Todos os tokens usados aqui são de um byte.
Eu acho que posso jogar isso ainda mais, modificando M no local a partir do final.
Explicação:
fonte
JavaScript (ES6),
716966 bytesExperimente online!
Indexado a 0.
-3 bytes por @Arnauld
fonte
i--?n%2?v*p[i]:v+p[i]