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
. . .
Recolher essas linhas à esquerda
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Classifique-os em ordem crescente
1
1 1
1 1 2
1 1 3 3
1 1 4 4 6
. . .
Leia este triângulo por linhas
[1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 4, 6 ...]
Dada uma entrada n
, imprima o n
número th nesta série. Este é o OEIS 107430 .
Regras
- Você pode escolher a indexação com base em 0 ou 1. Indique qual em sua submissão.
- Supõe-se que a entrada e a saída se encaixem no tipo inteiro nativo do seu idioma.
- A entrada e saída podem ser fornecidas por qualquer método 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.
- 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.
code-golf
sequence
number-theory
AdmBorkBork
fonte
fonte
Respostas:
JavaScript (ES6), 79 bytes
Indexado a 0.
Demo
Mostrar snippet de código
Quão?
Esse algoritmo gera diretamente as linhas classificadas do triângulo de Pascal. Ele atualiza n de acordo com o comprimento da linha anterior até que exista um [n] . Por exemplo, 6 iterações são necessárias para n = 19 :
fonte
Oitava , 46 bytes
Baseado em 1.
Experimente online!
Explicação
Considere
n=4
como um exemplo.pascal(n)
dá uma matriz Pascal:As linhas do triângulo Pascal são as antidiagonais desta matriz. Por isso, é invertido verticalmente usando
flip(···)
que transforma antidiagonais em diagonais.
spdiags(···)
extrai as diagonais (diferentes de zero), começando na parte inferior esquerda, e as organiza como colunas preenchidas com zero:M=sort(···)
classifica cada coluna desta matriz e atribui o resultado à variávelM
:A indexação lógica
(···)(~~M)
agora é usada para extrair os não-zeros desta matriz na ordem das colunas principais (abaixo e depois). O resultado é um vetor de coluna:Finalmente, a
n
-ésima entrada desse vetor é extraída usando(···)(n)
, o que neste caso fornece1
.fonte
Python 2 ,
867872 bytes-8 bytes graças a Rod
Experimente online!
Ungolfed
Experimente online!
A função calcula recursivamente a linha do triângulo de Pascal. Dada a linha atual como
row
,map(sum, zip([0] + row, row + [0]))
.Em cada chamada
n
é reduzido pelo comprimento da linha atual. Se a função chegar à linha direita, onth
número mais baixo da linha deve ser retornado.Como a primeira metade de uma linha está em ordem crescente e cada linha é simétrica, o número está no índice
n/2
(indexado a 0, divisão inteira).fonte
Wolfram Language (Mathematica) , 55 bytes
A indexação é baseada em 1.
Experimente online!
Explicação
Provavelmente é possível jogar golfe, não sou um usuário muito experiente do Mathematica.
Para cada n ∈ [0, Entrada] ℤ ℤ , gere a tabela de binômios com cada k ∈ [0, n] ∩ ℤ .
Classifique cada um. Usa uma abreviação para
Map[function,object]
-function/@object
.Achate a lista resultante e recupere o elemento cujo índice na lista é a entrada.
fonte
APL (Dyalog) ,
2625 bytes1 byte salvo graças a @ngn
Experimente online!
fonte
{⍵[⍋⍵]}
->(⍋⊃¨⊂)
R , 58 bytes
Experimente online!
Calcula
n choose k
para cadan,k
em[0,1,...,n]
como uma matriz, classifica as linhas ascendente (*), e remove os zeros, em seguida, selecciona on
elemento th.(*) Isso também os transforma em colunas, mas é melhor, pois R armazena uma matriz como um vetor coluna a coluna , o que nos permite indexar diretamente nela, preservando a ordem.
fonte
Haskell ,
143132125123 bytesA primeira linha é uma função sem ponto que pega um índice (com base em 0) e retorna o número apropriado na sequência. Experimente online!
Este é o meu primeiro programa Haskell! Tenho certeza que pode ficar muito mais curto. Dicas são apreciadas.
Economizou 2 bytes graças a nimi
Ungolfed
fonte
i
funçãos
, que foi renomeada para!
, eu acho. Se você usar uma função infix você pode soltar a()
voltareverse b
:s(a,b)=reverse b!a
.JavaScript, 57 bytes
Indexado a 0.
Como isso acontece:
Etapa 0:
Este código é fácil de entender:
c
calcula a fórmula de combinação de uso: C (n, k) = C (n-1, k) + C (n-1, k-1); ou 1 se k == 0 ou k == nf
tente descobrir o número e o índice da linha e chame a função c para obter o resultado.Passo 1:
Nesta etapa, tentamos modificar a chamada da função
c
parac(i,r)
que ela seja igual ao parâmetro def
.Passo 2:
Testamos
i<r
se estamos usando funçãof
ou funçãoc
. É por isso que nós pensamos em manter oi<r
controle durante a recursão da funçãoc
.Etapa 3:
Nesta etapa, mesclamos essas duas funções em uma.
Depois de mais um pouco de golfe, finalmente conseguimos a resposta descrita acima.
Mostrar snippet de código
fonte
Gelatina , 13 bytes
Experimente online!
Usando o algoritmo Dyalog de Uriel.
1 indexado.
Explicação:
fonte
þ
está fazendo aqui.JavaScript (Node.js) , 65 bytes
Nem mesmo uma matriz é usada. Indexado a 0.
Experimente online!
Explicação:
fonte
Pascal , 373 bytes
g
é a funçãoExperimente online!
fonte
n=1 then
pode sern=1then
.if(k=0)then
pode se tornarif k=0then
.word
vez deinteger
.Java 8, 187 bytes
Explicação:
Experimente online.
fonte
MATL , 11 bytes
Baseado em 1.
Experimente online! Ou verifique todos os casos de teste .
Explicação
Considere a entrada
4
como um exemplo.;
é o separador de linhas para matrizes ou vetores de coluna.fonte
Lote, 128 bytes
Indexado a 0.
fonte
r
e a coluna%1-(s-2)
do dia%1
da série. A quarta linha usa isso para calcular o coeficiente binomial(n k) = n!/(n-k)!k!
=n(n-1)...(n+1-k)/(1)(2)...k
=(n/1)((n-1)/2)...((n+1-k)/k)
. Onde está o MathJax quando eu precisar?APL (Dyalog Classic) , 17 bytes
Experimente online!
Indexação baseada em 0
observe que
(49!98) > 2*53
, ou seja, o coeficiente binomial 98 acima de 49 é maior que 2 53 , portanto, nesse momento, o Dyalog já começou a perder precisão devido ao ponto flutuante IEEEfonte
05AB1E , 10 bytes
Indexado a 0
Experimente online!
Explicação
fonte
Gelatina , 11 bytes
Experimente online!
Um link monádico que pega o índice e retorna um número inteiro - usa indexação baseada em 1.
Quão?
Realiza o desafio da mesma maneira que está escrito, com mais da direita do triângulo de Pascal (zeros), que é então jogado fora ...
fonte
Vermelho , 206 bytes
Baseado em 1
Experimente online!
Explicação:
fonte
Perl, 48 bytes
Inclui
+1
parap
Usa a indexação base 0.
fonte
J,
46bytesIndexado a 0
Experimente online!
Notas:
<.2&!@,:^:_1
fornece o número da linha relevante do triângulo de Pascal arredondando o inverso dey choose 2
./:~@(i.!<:)@]
calcula a linha e a classifica.[-2!]
fornece o índice para a linha.fonte
Julia , 70 bytes
Baseado em 1
Explicação:
primeiro encontre o número da linha, depois o número da coluna e calcule o binômio
fonte
Geléia , 17 bytes
Experimente online!
fonte
Pitão, 15 bytes
Indexado a 0
Tente
Explicação
fonte
Limpo , 80 bytes
Experimente online!
Como uma função lambda.
fonte
Ruby , 56 bytes
Baseado em 0
Primeiro, obtenha a linha e a coluna no triângulo e depois calcule o coeficiente binomial correspondente a essa posição.
Experimente online!
fonte
Na realidade , 8 bytes
Em grande parte baseado na resposta de Jonathan Allan's Jelly . Usa indexação 0.
Experimente online!
Ungolfing
fonte
n
da série. Isso produz uma matriz.Coco , 69 bytes
Experimente online!
fonte
Pari / GP , 47 bytes
Experimente online!
fonte
C (gcc) ,
140123 bytesExperimente online!
fonte