MATL , 22 20 19 byte
Ti:"2Y6Y+FT_Y)]!i_)
Cả hai đầu vào đều dựa trên 0.
Hãy thử trực tuyến!
Giải trình
Đặt r
và c
biểu thị hai đầu vào, chỉ định hàng và cột dựa trên 0 tương ứng.
Mỗi hàng mới trong hình thoi của Pascal có thể được xây dựng từ ma trận chứa hai hàng trước bằng cách kết hợp với kernel [1 1 1; 0 1 0]
và giữ hai hàng cuối cùng của kết quả được hoán đổi. Điều này được thực hiện r
lần, bắt đầu từ ma trận 1
.
Hóa ra là ngắn hơn để sử dụng kernel [0 1 0; 1 1 1; 0 1 0]
, đó là một nghĩa đen được xác định trước. Điều này tạo ra một hàng thêm, sẽ được loại bỏ.
Xem xét ví dụ r = 3
, vì vậy có 3
lặp đi lặp lại.
Bắt đầu từ
1
tích chập với [0 1 0; 1 1 1; 0 1 0]
cho
0 1 0
1 1 1
0 1 0
Giữ hai hàng cuối cùng (trong toàn bộ ma trận, trong trường hợp này) và hoán đổi chúng cho
0 1 0
1 1 1
Kết luận ở trên với [0 1 0; 1 1 1; 0 1 0]
cho
0 0 1 0 0
0 1 1 1 0
1 2 4 2 1
0 1 1 1 0
Ma trận được hình thành bởi hai hàng cuối cùng được hoán đổi là
0 1 1 1 0
1 2 4 2 1
Cái này chứa hàng mới ở phía dưới và hàng trước được mở rộng bằng số không.
Năng suất lại
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
Lấy hai hàng cuối cùng hoán đổi cho
0 1 2 4 2 1 0
1 3 8 9 8 3 1
Sau khi r
lặp lại xong, đầu ra được chứa trong hàng cuối cùng của ma trận cuối cùng. Ví dụ: đối với c = 2
(dựa trên 0) kết quả sẽ là 8
. Thay vì lập chỉ mục cho hàng cuối cùng và cột mong muốn, có thể sử dụng một mẹo để khai thác tính đối xứng của mỗi hàng: ma trận cuối cùng được hoán vị
0 1
1 3
2 8
4 9
2 8
1 3
0 1
và -c
phần tử thứ của nó được thực hiện. Điều này sử dụng lập chỉ mục tuyến tính, nghĩa là ma trận được lập chỉ mục bởi một chỉ mục theo thứ tự chính của cột . Vì lập chỉ mục là mô-đun , 0
-entry là góc dưới bên phải (giá trị 1
) và -2
mục -th là hai bước trên (giá trị 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