La plupart des gens ici connaissent le triangle de Pascal. Il est formé de rangées successives, où chaque élément est la somme de ses deux voisins supérieur gauche et supérieur droit. Voici les premières 5
lignes (empruntées au triangle Générer Pascal ):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Réduire ces rangées à gauche
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Triez-les par ordre croissant
1
1 1
1 1 2
1 1 3 3
1 1 4 4 6
. . .
Lisez ce triangle par rangées
[1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 4, 6 ...]
Étant donné une entrée n
, sortez le n
numéro e de cette série. Il s'agit d' OEIS 107430 .
Règles
- Vous pouvez choisir une indexation basée sur 0 ou 1. Veuillez indiquer lequel dans votre soumission.
- L'entrée et la sortie peuvent être supposées correspondre au type d'entier natif de votre langue.
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
code-golf
sequence
number-theory
AdmBorkBork
la source
la source
Réponses:
JavaScript (ES6), 79 octets
0 indexé.
Démo
Afficher l'extrait de code
Comment?
Cet algorithme génère directement les lignes triées du triangle de Pascal. Il met à jour n en fonction de la longueur de la ligne précédente jusqu'à ce qu'il existe un [n] . Par exemple, 6 itérations sont nécessaires pour n = 19 :
la source
Octave , 46 octets
1 basé.
Essayez-le en ligne!
Explication
Considérez
n=4
comme exemple.pascal(n)
donne une matrice Pascal:Les rangées du triangle Pascal sont les antidiagonales de cette matrice. Il est donc retourné verticalement en utilisant
flip(···)
qui transforme les antidiagonales en diagonales.
spdiags(···)
extrait les diagonales (non nulles), en partant du coin inférieur gauche, et les organise sous forme de colonnes à remplissage nul:M=sort(···)
trie chaque colonne de cette matrice et affecte le résultat à la variableM
:L'indexation logique
(···)(~~M)
est maintenant utilisée pour extraire les non-zéros de cette matrice dans l'ordre des colonnes (vers le bas, puis à travers). Le résultat est un vecteur colonne:Enfin, la
n
-ième entrée de ce vecteur est extraite à l'aide(···)(n)
de ce qui donne dans ce cas1
.la source
Python 2 ,
867872 octets-8 octets grâce à Rod
Essayez-le en ligne!
Non golfé
Essayez-le en ligne!
La fonction calcule récursivement la ligne du triangle de Pascal. Compte tenu de la ligne actuelle comme
row
,map(sum, zip([0] + row, row + [0]))
.À chaque appel,
n
la longueur de la ligne en cours est réduite. Si la fonction arrive sur la ligne de droite, lenth
numéro le plus bas de la ligne doit être renvoyé.Comme la première moitié d'une ligne est en ordre croissant et que chaque ligne est symétrique, le nombre est à l'index
n/2
(indexé sur 0, division entière).la source
Wolfram Language (Mathematica) , 55 octets
L'indexation est basée sur 1.
Essayez-le en ligne!
Explication
C'est probablement jouable au golf, je ne suis pas un utilisateur très expérimenté de Mathematica.
Pour chaque n ∈ [0, entrée] ∩ ℤ , générez le tableau des binômes avec chaque k ∈ [0, n] ∩ ℤ .
Triez chacun. Utilise un raccourci pour
Map[function,object]
-function/@object
.Aplatissez la liste résultante et récupérez l'élément dont l'index dans la liste est l'entrée.
la source
APL (Dyalog) ,
2625 octets1 octet enregistré grâce à @ngn
Essayez-le en ligne!
la source
{⍵[⍋⍵]}
->(⍋⊃¨⊂)
R , 58 octets
Essayez-le en ligne!
Calcule
n choose k
pour chaquen,k
en[0,1,...,n]
tant que matrice, trie les lignes ascendant (*), et supprime les zéros, puis l'n
élément e.(*) Cela les transforme également en colonnes, mais c'est mieux car R stocke une matrice comme un vecteur colonne, ce qui nous permet de l'indexer directement tout en préservant l'ordre.
la source
Haskell ,
143132125123 octetsLa première ligne est une fonction sans point qui prend un index (basé sur 0) et renvoie le nombre approprié dans la séquence. Essayez-le en ligne!
Ceci est mon tout premier programme Haskell! Je suis sûr que cela peut devenir beaucoup plus court. Les pourboires sont appréciés.
Enregistré 2 octets grâce à nimi
Non golfé
la source
i
en fonctions
, qui a été renommé!
, je suppose. Si vous utilisez une fonction infixe vous pouvez laisser tomber le()
autour dereverse b
:s(a,b)=reverse b!a
.JavaScript, 57 octets
0 indexé.
Comment cela se fait-il:
Étape 0:
Ce code est facile à comprendre:
c
calcule la formule d'utilisation de combinaison: C (n, k) = C (n-1, k) + C (n-1, k-1); ou 1 si k == 0 ou k == nf
essayer de trouver le numéro de ligne et l' indice de la ligne, puis appeler la fonction c pour obtenir le résultat.Étape 1:
Dans cette étape, nous essayons de modifier l'appel de la fonction
c
à cec(i,r)
qui en fait la même que paramètref
.Étape 2:
Nous testons
i<r
si l'utilisation de la fonctionf
ou de la fonctionc
. C'est pourquoi nous musk maintenons lesi<r
prises pendant la récursivité de la fonctionc
.Étape 3:
À cette étape, nous fusionnons ces deux fonctions en une seule.
Après un peu plus de golf, nous avons finalement obtenu la réponse décrite ci-dessus.
Afficher l'extrait de code
la source
Gelée , 13 octets
Essayez-le en ligne!
Utilisation de l'algorithme Dyalog d'Uriel.
1 indexé.
Explication:
la source
þ
se passe ici.JavaScript (Node.js) , 65 octets
Même un tableau n'est pas utilisé. 0 indexé.
Essayez-le en ligne!
Explication:
la source
Pascal , 373 octets
g
est la fonction.Essayez-le en ligne!
la source
n=1 then
peut êtren=1then
.if(k=0)then
peut devenirif k=0then
.word
place deinteger
.Java 8, 187 octets
Explication:
Essayez-le en ligne.
la source
MATL , 11 octets
1 basé.
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Considérez l'entrée
4
comme exemple.;
est le séparateur de lignes pour les matrices ou les vecteurs de colonnes.la source
Lot, 128 octets
0 indexé.
la source
r
et la colonne%1-(s-2)
du%1
th de la série. La quatrième ligne utilise ensuite cela pour calculer le coefficient 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)
. Où est MathJax quand j'en ai besoin?APL (Dyalog Classic) , 17 octets
Essayez-le en ligne!
Indexation basée sur 0
notez que
(49!98) > 2*53
, c.-à-d. que le coefficient binomial 98 sur 49 est supérieur à 2 53 , donc à ce point Dyalog a déjà commencé à perdre de la précision à cause du point flottant IEEEla source
05AB1E , 10 octets
0 indexé
Essayez-le en ligne!
Explication
la source
Gelée , 11 octets
Essayez-le en ligne!
Un lien monadique prenant l'index et renvoyant un entier - utilise une indexation basée sur 1.
Comment?
Effectue le défi à peu près tel qu'il est écrit, juste avec plus de la droite du triangle de Pascal (zéros) qui est ensuite jeté ...
la source
Rouge , 206 octets
1 base
Essayez-le en ligne!
Explication:
la source
Perl, 48 octets
Comprend
+1
pourp
Utilise l'indexation base 0.
la source
J,
4641 octets0 indexé
Essayez-le en ligne!
Remarques:
<.2&!@,:^:_1
donne le numéro de ligne pertinent du triangle de Pascal en arrondissant l'inverse dey choose 2
./:~@(i.!<:)@]
calcule la ligne et la trie.[-2!]
donne l'index dans la ligne.la source
Julia , 70 octets
1 base
Explication:
il trouve d'abord le numéro de ligne, puis le numéro de colonne, puis calcule le binôme
la source
Gelée , 17 octets
Essayez-le en ligne!
la source
Pyth, 15 octets
0 indexé
Essayez-le
Explication
la source
Nettoyer , 80 octets
Essayez-le en ligne!
En tant que fonction lambda.
la source
Rubis , 56 octets
Basé sur 0
Obtenez d'abord la ligne et la colonne dans le triangle, puis calculez le coefficient binomial correspondant à cette position.
Essayez-le en ligne!
la source
Réellement , 8 octets
Largement basé sur la réponse Jelly de Jonathan Allan . Utilise l'indexation 0.
Essayez-le en ligne!
Ungolfing
la source
n
th de la série. Cela produit un tableau.Noix de coco , 69 octets
Essayez-le en ligne!
la source
Pari / GP , 47 octets
Essayez-le en ligne!
la source
C (gcc) ,
140123 octetsEssayez-le en ligne!
la source