Fast jeder hier ist mit Pascals Dreieck vertraut. Es besteht aus aufeinanderfolgenden Zeilen, wobei jedes Element die Summe der beiden Nachbarn oben links und oben rechts ist. Hier sind die ersten 5
Zeilen (aus dem Generate Pascal-Dreieck entlehnt ):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Reduzieren Sie diese Zeilen nach links
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Sortieren Sie sie in aufsteigender Reihenfolge
1
1 1
1 1 2
1 1 3 3
1 1 4 4 6
. . .
Lesen Sie dieses Dreieck zeilenweise
[1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 4, 6 ...]
Geben Sie bei einer Eingabe n
die n
th-Zahl in dieser Reihe aus. Dies ist OEIS 107430 .
Regeln
- Sie können zwischen 0- und 1-basierter Indizierung wählen. Bitte geben Sie bei Ihrer Einreichung an, welche.
- Es kann davon ausgegangen werden, dass die Eingabe und Ausgabe in den systemeigenen Ganzzahltyp Ihrer Sprache passen.
- Die Eingabe und Ausgabe kann durch jede bequeme Methode erfolgen .
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
code-golf
sequence
number-theory
AdmBorkBork
quelle
quelle
Antworten:
JavaScript (ES6), 79 Byte
0-indiziert.
Demo
Code-Snippet anzeigen
Wie?
Dieser Algorithmus generiert direkt die sortierten Zeilen des Pascalschen Dreiecks. Es aktualisiert n entsprechend der Länge der vorherigen Zeile, bis ein [n] existiert. Beispielsweise sind für n = 19 6 Iterationen erforderlich :
quelle
Oktave , 46 Bytes
1-basiert.
Probieren Sie es online!
Erläuterung
Betrachten Sie
n=4
als Beispiel.pascal(n)
gibt eine Pascal-Matrix:Die Reihen des Pascal-Dreiecks sind die Antidiagonalen dieser Matrix. So wird es vertikal mit gespiegelt
flip(···)
die Antidiagonalen in Diagonalen verwandelt.
spdiags(···)
extrahiert die Diagonalen (ungleich Null) von links unten und ordnet sie als mit Nullen aufgefüllte Spalten an:M=sort(···)
sortiert jede Spalte dieser Matrix und weist das Ergebnis der Variablen zuM
:Die logische Indizierung
(···)(~~M)
wird jetzt verwendet, um die Nicht-Zeros dieser Matrix in Spalten-Hauptreihenfolge (abwärts, dann quer) zu extrahieren. Das Ergebnis ist ein Spaltenvektor:Schließlich wird der
n
-te Eintrag dieses Vektors mit extrahiert(···)(n)
, was in diesem Fall ergibt1
.quelle
Python 2 ,
867872 Bytes-8 Bytes dank Rod
Probieren Sie es online!
Ungolfed
Probieren Sie es online!
Die Funktion berechnet rekursiv die Zeile des Pascalschen Dreiecks. Angesichts der gegenwärtigen Zeile als
row
,map(sum, zip([0] + row, row + [0]))
.Bei jedem Aufruf
n
wird die Länge der aktuellen Zeile reduziert. Wenn die Funktion in der rechten Zeile ankommt, sollte dienth
niedrigste Nummer der Zeile zurückgegeben werden.Da sich die erste Hälfte einer Zeile in aufsteigender Reihenfolge befindet und jede Zeile symmetrisch ist, befindet sich die Nummer am Index
n/2
(0-indexierte Ganzzahldivision).quelle
Wolfram Language (Mathematica) , 55 Byte
Die Indizierung basiert auf 1.
Probieren Sie es online!
Erläuterung
Dies ist wahrscheinlich golffähig, ich bin kein sehr erfahrener Mathematica-Benutzer.
Generieren Sie für jedes n ∈ [0, Eingabe] ∩ ∩ die Tabelle der Binome mit jedem k ∈ [0, n] ∩ ℤ .
Sortieren Sie jeden. Verwendet eine Abkürzung für
Map[function,object]
-function/@object
.Reduzieren Sie die resultierende Liste und rufen Sie das Element ab, dessen Index in der Liste die Eingabe ist.
quelle
APL (Dyalog) ,
26 bis25 Bytes1 Byte gespeichert dank @ngn
Probieren Sie es online!
quelle
{⍵[⍋⍵]}
->(⍋⊃¨⊂)
R , 58 Bytes
Probieren Sie es online!
Berechnet
n choose k
für jedenn,k
in[0,1,...,n]
als Matrix, sortiert die Zeilen aufsteigend (*), und entfernt die Nullen, dann wählt dasn
ten Element.(*) Dadurch werden sie auch in Spalten umgewandelt, aber das ist besser, da R eine Matrix spaltenweise als Vektor speichert, sodass wir sie direkt indizieren und dabei die Reihenfolge beibehalten können.
quelle
Haskell ,
143132125123 BytesDie erste Zeile ist eine punktfreie Funktion, die einen Index (0-basiert) verwendet und die entsprechende Nummer in der Sequenz zurückgibt. Probieren Sie es online!
Dies ist mein erstes Haskell-Programm! Ich bin sicher, es kann viel kürzer werden. Trinkgelder sind erwünscht.
2 Bytes dank nimi gespart
Ungolfed
quelle
i
in Funktions
, die umbenannt wurde!
, denke ich. Wenn Sie eine Infix Funktion können Sie die Drop()
umreverse b
:s(a,b)=reverse b!a
.JavaScript, 57 Bytes
0-indiziert.
Wie kommt das
Schritt 0:
Dieser Code ist leicht zu verstehen:
c
berechnet die Formel für die Kombinationsverwendung: C (n, k) = C (n-1, k) + C (n-1, k-1); oder 1, wenn k == 0 oder k == nf
versuchen Sie, die Zeilennummer und den Index in der Zeile herauszufinden, und rufen Sie dann die Funktion c auf, um das Ergebnis zu erhalten.Schritt 1:
In diesem Schritt versuchen wir , den Aufruf der Funktion zu ändern ,
c
zuc(i,r)
denen macht es genauso wie Parameterf
.Schritt 2:
Wir testen,
i<r
ob die Funktion verwendet wirdf
oder Funktion verwendet wirdc
. Das ist der Grund, warum wiri<r
während der Funktionsrekursion Moschus haltenc
.Schritt 3:
In diesem Schritt verschmelzen wir diese beiden Funktionen zu einer.
Nach etwas mehr Golf haben wir endlich die oben beschriebene Antwort bekommen.
Code-Snippet anzeigen
quelle
Jelly , 13 Bytes
Probieren Sie es online!
Verwendung des Dyalog-Algorithmus von Uriel.
1-indiziert.
Erläuterung:
quelle
þ
hier passiert.JavaScript (Node.js) , 65 Byte
Nicht einmal ein Array wird verwendet. 0-indiziert.
Probieren Sie es online!
Erläuterung:
quelle
Pascal , 373 Bytes
g
ist die Funktion.Probieren Sie es online!
quelle
n=1 then
kann seinn=1then
.if(k=0)then
werdenif k=0then
.word
anstelle von verwendeninteger
.Java 8, 187 Bytes
Erläuterung:
Probieren Sie es online aus.
quelle
MATL , 11 Bytes
1-basiert.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Betrachten Sie die Eingabe
4
als Beispiel.;
ist der Zeilentrenner für Matrizen oder Spaltenvektoren.quelle
Batch, 128 Bytes
0-indiziert.
quelle
r
und die Spalte%1-(s-2)
des%1
th der Reihe. In der vierten Zeile wird dann der Binomialkoeffizient(n k) = n!/(n-k)!k!
=n(n-1)...(n+1-k)/(1)(2)...k
= berechnet(n/1)((n-1)/2)...((n+1-k)/k)
. Wo ist MathJax, wenn ich es brauche?APL (Dyalog Classic) , 17 Byte
Probieren Sie es online!
0-basierte Indizierung
Beachten Sie, dass
(49!98) > 2*53
der Binomialkoeffizient 98 über 49 größer als 2 53 ist , sodass Dyalog zu diesem Zeitpunkt aufgrund von IEEE-Gleitkomma bereits an Genauigkeit verliertquelle
05AB1E , 10 Bytes
0-indiziert
Probieren Sie es online!
Erläuterung
quelle
Jelly , 11 Bytes
Probieren Sie es online!
Ein monadischer Link, der den Index aufnimmt und eine Ganzzahl zurückgibt - verwendet eine 1-basierte Indizierung.
Wie?
Führt die Herausforderung so aus, wie sie geschrieben wurde, nur mit mehr rechts von Pascals Dreieck (Nullen), das dann weggeworfen wird ...
quelle
Rot , 206 Bytes
1-basiert
Probieren Sie es online!
Erläuterung:
quelle
Perl, 48 Bytes
Enthält
+1
fürp
Verwendet die Indexierung zur Basis 0.
quelle
J,
4641 Bytes0-indiziert
Probieren Sie es online!
Anmerkungen:
<.2&!@,:^:_1
ergibt die relevante Zeilennummer des Pascalschen Dreiecks durch Abrunden des Kehrwerts vony choose 2
./:~@(i.!<:)@]
berechnet die Zeile und sortiert sie.[-2!]
gibt den Index in die Zeile.quelle
Julia , 70 Bytes
1-basiert
Erläuterung:
Es findet zuerst die Zeilennummer, dann die Spaltennummer und berechnet dann das Binomial
quelle
Gelee , 17 Bytes
Probieren Sie es online!
quelle
Pyth, 15 Bytes
0-indiziert
Versuch es
Erläuterung
quelle
Sauber , 80 Bytes
Probieren Sie es online!
Als Lambda-Funktion.
quelle
Ruby , 56 Bytes
0-basiert
Holen Sie sich zuerst die Zeile und die Spalte in das Dreieck und berechnen Sie dann den dieser Position entsprechenden Binomialkoeffizienten.
Probieren Sie es online!
quelle
Eigentlich 8 Bytes
Hauptsächlich basierend auf Jonathan Allans Jelly-Antwort . Verwendet die 0-Indizierung.
Probieren Sie es online!
Ungolfing
quelle
n
th in der serie. Dies erzeugt ein Array.Kokosnuss , 69 Bytes
Probieren Sie es online!
quelle
Pari / GP , 47 Bytes
Probieren Sie es online!
quelle
C (GCC) ,
140123 BytesProbieren Sie es online!
quelle