MATL , 22 20 19 Bytes
Ti:"2Y6Y+FT_Y)]!i_)
Beide Eingänge sind 0-basiert.
Probieren Sie es online!
Erläuterung
Lassen Sie rund cbezeichnen Sie die zwei Eingaben, die 0-basierte Zeile bzw. Spalte angeben.
Jede neue Zeile in Pascals Rhombus kann aus der Matrix erstellt werden, die die vorherigen beiden Zeilen enthält, indem Sie mit dem Kernel zusammenarbeiten [1 1 1; 0 1 0]und die letzten beiden Zeilen des Ergebnisses vertauschen. Dies geschieht rmal ausgehend von der Matrix 1.
Es stellt sich als kürzer heraus, den Kernel zu verwenden [0 1 0; 1 1 1; 0 1 0], der ein vordefiniertes Literal ist. Dies erzeugt eine zusätzliche Zeile, die verworfen wird.
Betrachten Sie zum Beispiel r = 3, so gibt es 3Iterationen.
Ab
1
Faltung mit [0 1 0; 1 1 1; 0 1 0]gibt
0 1 0
1 1 1
0 1 0
Halten Sie die letzten beiden Zeilen (in diesem Fall die gesamte Matrix) und tauschen Sie sie aus
0 1 0
1 1 1
Faltung der obigen mit [0 1 0; 1 1 1; 0 1 0]gibt
0 0 1 0 0
0 1 1 1 0
1 2 4 2 1
0 1 1 1 0
Die Matrix aus den beiden zuletzt getauschten Zeilen lautet
0 1 1 1 0
1 2 4 2 1
Diese enthält die neue Zeile unten und die vorherige Zeile mit Nullen.
Nochmaliges Wickeln ergibt
0 0 1 1 1 0 0
0 1 2 3 2 1 0
1 3 8 9 8 3 1
0 1 2 4 2 1 0
Das Nehmen der letzten zwei getauschten Reihen gibt
0 1 2 4 2 1 0
1 3 8 9 8 3 1
Nach den rIterationen ist die Ausgabe in der letzten Zeile der endgültigen Matrix enthalten. Zum Beispiel wäre für c = 2(0-basiert) das Ergebnis 8. Anstatt die letzte Zeile und die gewünschte Spalte zu indizieren, kann ein Trick verwendet werden, der die Symmetrie jeder Zeile ausnutzt : Die endgültige Matrix wird transponiert
0 1
1 3
2 8
4 9
2 8
1 3
0 1
und sein -c-tes Element wird genommen. Dies verwendet die lineare Indizierung, das heißt, die Matrix wird durch einen einzelnen Index in der Reihenfolge des Spaltenhauptteils indiziert . Da die Indizierung modular ist , befindet sich der 0-Eintrag in der unteren rechten Ecke (Wert 1) und der -2-te Eintrag in zwei Schritten oberhalb (Wert 8).
T % Push true
i % Input row number
:" % Do the following that many times
2Y6 % Push predefined literal [0 1 0; 1 1 1; 0 1 0]
Y+ % 2D convolution, increasing size
FT_ % Push [0 -1]
Y) % Matrix with rows 0 (last) and -1 (second-last), in that order
] % End
! % Transpose
i % Input: colun number
_ % Negate
) % Entry with that index. Implicitly display