Das Pascalsche Dreieck wird erzeugt, indem 1
jede Zeile aus aufeinanderfolgenden Additionen gebildet wird. Stattdessen bilden wir hier ein Dreieck, indem wir Multiplikation und Addition abwechseln.
Wir beginnen die Reihe 1
mit nur einem Einzelgänger 1
. Danach werden die ungeraden Zeilen addiert und die geraden Zeilen multipliziert (1-indiziert). Wenn Sie den Additionsschritt ausführen, nehmen Sie an, dass die Räume außerhalb des Dreiecks mit 0
s gefüllt sind . Wenn Sie den Multiplikationsschritt ausführen, nehmen Sie an, dass die Außenseite mit 1
s gefüllt ist .
Hier ist das volle Dreieck bis auf 7 Zeilen. Das *
oder +
auf der linken Seite zeigt, welcher Schritt ausgeführt wurde, um diese Zeile zu generieren.
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
Herausforderung
Bei gegebener Eingabe n
wird die n
dritte Zeile dieses Dreiecks ausgegeben .
Regeln
- Sie können stattdessen 0-index wählen, aber beachten Sie, dass die Additions- und Multiplikationszeilen flip-flop sein müssen, damit genau dasselbe Dreieck wie oben generiert wird. Bitte geben Sie bei Ihrer Einreichung an, ob Sie dies tun möchten.
- Es kann davon ausgegangen werden, dass die Eingabe und Ausgabe in den systemeigenen Ganzzahltyp Ihrer Sprache passen.
- Die Ein- und Ausgabe kann in jedem beliebigen Format 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.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
Es werden zwei mögliche Beispiele für die Ausgabe von vielen angezeigt: eine Liste oder eine durch Leerzeichen getrennte Zeichenfolge.
4
[1, 2, 2, 1]
8
"1 4 60 360 360 60 4 1"
quelle
n
dritte Reihe.Antworten:
Pascal ,
249247233 BytesNun, das ist Pascals alternierendes Dreieck.
1 Byte gespart dank @ Mr.Xcoder
Probieren Sie es online!
quelle
Python 2 ,
9793868178 Bytes-4 Bytes dank Rod. -10 Bytes dank Halvard Hummel.
0-indiziert.
Probieren Sie es online!
quelle
map([int.__add__ ,int.__mul__][i%2],[i%2]+a,a+[i%2])
sollte funktionieren (nicht getestet)Jelly ,
1712 BytesDies ist ein vollständiges Programm (oder ein Niladic Link), das Eingaben von STDIN entgegennimmt.
Probieren Sie es online!
Wie es funktioniert
quelle
Python 2 ,
96 8987 Bytes2 Bytes Dank an Herrn Xcoder:
s=[1]
Ein bisschen anders als die Antwort von totalhuman
Probieren Sie es online!
quelle
[1]
.CJam , 25 Bytes
0-indiziert.
Probieren Sie es online!
Erläuterung
Dies ist ein anonymer Block, der die Nummer vom Stapel nimmt und das Ergebnis auf dem Stapel belässt.
quelle
2%!
sollte 1 wenn gerade und 0 wenn ungerade, nein drücken?Mathematica, 92 Bytes
Probieren Sie es online! (Um die Mathematik zu bearbeiten, wird "Tr" durch "Total" ersetzt.)
quelle
Haskell ,
7672 Bytes0-indizierte Lösung:
Probieren Sie es online!
Erläuterung
p
definiert rekursiv das alternierende Dreieck, dessen Basisfall / erstes Element ist[1]
Dann baut es das Dreieck auf, indem es die vorhergehende Linie (
l
) nimmt. Um zu wissen, was damit zu tun ist, müssen wir den richtigen Operator (o
) und das entsprechende neutrale Element (e
) im Auge behalten :Erstellen Sie daraus die neue Zeile, indem Sie die Zeile duplizieren. Bei einer Kopie stellen wir das neutrale Element voran, komprimieren sie mit dem Operator und fügen eine 1 hinzu:
quelle
R ,
10898 Bytes-10 Byte durch Ersetzen des tatsächlichen Multiplikationszeichens durch ein Pluszeichen. Bitte verzeih mir.
Probieren Sie es online!
Sehr zufrieden mit der allgemeinen Methode (ich habe zum ersten Mal ein Primitiv als Alias verwendet), aber ich bin mir sicher, dass noch einiges zu tun ist, insbesondere bei der umständlichen Behandlung von Fällen mit n <3, die zu viel Boilerplate führen.
quelle
`*`=`+`
! ziemlich schlau. Der Rest meiner Verbesserungen sind nur Standard-Golftechniken, die ich gerne auf Ihren Wunsch hin erläutere :)n<3
Schale ,
1716 BytesProbieren Sie es online!
Eine 1-indizierte Lösung.
Erläuterung
Die erste Zeile ist die Hauptfunktion, die die Hilfsfunktion in der zweiten Zeile aufruft. Die Hilfsfunktion wird normalerweise mit aufgerufen
₁
, aber in diesem Fall verwende ich die Funktion für überlaufende Bezeichnungen von Husk: Wenn Sie in einem Programm mit M <N Zeilen auf eine Zeile N verweisen , erhalten Sie die Zeile N mod M mit der Modifikatorfunktion M / N darauf angewendet. Die zweite Modifikatorfunktion ist , damit ich die Argumente der Hilfsfunktion ohne zusätzliche Bytekosten spiegeln kann.flip
₅
Hier ist die Hilfsfunktion.
Hier ist die Hauptfunktion.
quelle
C # (.NET Core) ,
143134128 Bytes-4 Bytes dank Phaeze
-5 Bytes dank Zac Faragher
-6 Bytes dank Kevin Cruijssen
Probieren Sie es online!
Erläuterung:
quelle
var b=new[]{1};
und der Compiler wird den Array-Typ für Sie bestimmen.int[]b={1};
- 11 Bytes vs 20 as is oder 16 as in @Phaezes Vorschlagn=>{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;}
. Ich habe kombiniertc
wie folgtint[]b={1},c;
; verkürzti%2==0
aufi%2<1
; Und entferne die Klammern der Schleife, indem du alles hineinlegst.Python 2 , 83 Bytes
Gib
exec
0-indizierten etwas Liebe
Probieren Sie es online!
quelle
Pyth , 22 Bytes
Tonnenweise Byte gespart dank @FryAmTheEggman ! Die anfängliche Lösung ist unten.
Vollständige Testsuite (0-indiziert).
Pyth ,
40 38 3635 BytesDas fühlt sich
zulang an. Vorschläge sind willkommen.Test Suite oder Online testen !
quelle
u
(konnte es aber nicht herausfinden). Vielen Dank!J , 32 Bytes
Probieren Sie es online!
quelle
Perl 5 , 111 + 2 (-na) = 113 Bytes
Probieren Sie es online!
quelle
Mathematica, 70 Bytes
Probieren Sie es am Wolfram Sandkasten ! In der Mathematik funktioniert das leider nicht. Es ist 0-indiziert.
Erläuterung:
Partition[#,2,1,{-1,1},{}]
Nimmt eine Liste und gibt alle Unterlisten mit zwei Elementen sowie Listen mit einem Element für Anfang und Ende zurück, z . B.{1,2,3,4}
wird{{1}, {1,2}, {2,3}, {3,4}, {4}}
.PadRight[{},#,{1##&,Plus}]
erstellt eine abwechselnde Liste von1##&
(effektivTimes
) undPlus
, deren Länge die eingegebene Nummer ist. Wendet dannFold
wiederholt die Partitionsfunktion mit den darauf angewendetenPlus
es undTimes
es an, um die Zeilen des Dreiecks zu erstellen.quelle
Ruby ,
8382 BytesProbieren Sie es online!
Dies ist 0-indiziert.
quelle
Schläger , 116 Bytes
Probieren Sie es online!
quelle
TI-Basic (TI-84 Plus CE), 100 Byte
1-indiziert, fordert den Benutzer zur Eingabe auf und druckt eine Liste mit dem
n
dritten Zeile von Pascals alternierendem Dreieck.Während der Schleife: L M ist die aktuelle Zeile und L L ist die vorherige Zeile.
TI-Basic ist eine Token-Sprache . Alle hier verwendeten Token sind Ein-Byte-Token.
Ich denke, ich kann dies weiter verbessern, indem ich M am Ende an der richtigen Stelle ändere.
Erläuterung:
quelle
JavaScript (ES6),
716966 BytesProbieren Sie es online!
0-indiziert.
-3 Bytes von @Arnauld
quelle
i--?n%2?v*p[i]:v+p[i]