MATL , 22 20 19 байт
Ti:"2Y6Y+FT_Y)]!i_)
Обидва входи засновані на 0.
Спробуйте в Інтернеті!
Пояснення
Нехай rі cпозначають два входи із зазначенням рядка та стовпця на основі 0.
Кожен новий рядок у ромба Паскаля може бути побудований з матриці, що містить попередні два ряди, з'єднавшись з ядром [1 1 1; 0 1 0]і зберігаючи два останні ряди результату. Це робиться rразів, починаючи з матриці 1.
Виявляється, коротше використовувати ядро [0 1 0; 1 1 1; 0 1 0], яке є заздалегідь заданим літералом. Це створить додатковий рядок, який буде відкинутий.
Розглянемо для прикладу r = 3, тому є 3ітерації.
Починаючи з
1
згортання з [0 1 0; 1 1 1; 0 1 0]дає
0 1 0
1 1 1
0 1 0
Зберігання останніх двох рядків (вся матриця, в даному випадку) та заміна їх дає
0 1 0
1 1 1
Згортання вище [0 1 0; 1 1 1; 0 1 0]дає
0 0 1 0 0
0 1 1 1 0
1 2 4 2 1
0 1 1 1 0
Матриця, утворена двома останніми рядками, що помінялася, є
0 1 1 1 0
1 2 4 2 1
Він містить новий рядок внизу, а попередній розширений нулями.
Повторне залучення врожайності
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
Прийняття останніх двох рядків замінено дає
0 1 2 4 2 1 0
1 3 8 9 8 3 1
Після завершення rітерацій висновок міститься в останньому рядку підсумкової матриці. Наприклад, для c = 2(на основі 0) результат був би 8. Замість індексації останнього рядка та потрібного стовпця може бути використаний трюк, який використовує симетрію кожного рядка: остаточну матрицю переносять
0 1
1 3
2 8
4 9
2 8
1 3
0 1
і -cбереться його -й елемент. При цьому використовується лінійна індексація, тобто матриця індексується одним індексом у стовпчиковому порядку. Оскільки індексація є модульною , 0-entry - це нижній правий кут (значення 1), а -2-та запис - на два кроки вище (значення 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