MATL , 22 20 19 byte
Ti:"2Y6Y+FT_Y)]!i_)
Kedua input berbasis 0.
Cobalah online!
Penjelasan
Biarkan r
danc
tunjukkan kedua input, dengan menentukan baris dan kolom berbasis 0 masing-masing.
Setiap baris baru dalam belah ketupat Pascal dapat dibangun dari matriks yang berisi dua baris sebelumnya dengan berbelit - belit dengan kernel [1 1 1; 0 1 0]
dan menjaga dua baris terakhir dari hasil swap. Ini dilakukan r
kali, mulai dari matriks 1
.
Ternyata lebih pendek untuk menggunakan kernel [0 1 0; 1 1 1; 0 1 0]
, yang merupakan literal yang sudah ditentukan sebelumnya. Ini menghasilkan baris tambahan, yang akan dibuang.
Pertimbangkan misalnya r = 3
, jadi ada 3
iterasi.
Mulai dari
1
konvolusi dengan [0 1 0; 1 1 1; 0 1 0]
memberi
0 1 0
1 1 1
0 1 0
Mempertahankan dua baris terakhir (seluruh matriks, dalam kasus ini) dan menukar memberi
0 1 0
1 1 1
Konvolusi di atas dengan [0 1 0; 1 1 1; 0 1 0]
memberi
0 0 1 0 0
0 1 1 1 0
1 2 4 2 1
0 1 1 1 0
Matriks yang dibentuk oleh dua baris terakhir ditukar adalah
0 1 1 1 0
1 2 4 2 1
Ini berisi baris baru di bagian bawah, dan yang sebelumnya diperpanjang dengan nol.
Menggabungkan lagi hasil panen
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
Mengambil dua baris terakhir bertukar memberi
0 1 2 4 2 1 0
1 3 8 9 8 3 1
Setelah r
iterasi dilakukan, output terkandung di baris terakhir dari matriks final. Misalnya, untuk c = 2
(berbasis 0) hasilnya akan 8
. Alih-alih mengindeks baris terakhir dan kolom yang diinginkan, trik dapat digunakan yang mengeksploitasi simetri setiap baris: matriks akhir ditransformasikan
0 1
1 3
2 8
4 9
2 8
1 3
0 1
dan -c
elemen ke -nya diambil. Ini menggunakan pengindeksan linear, yaitu, matriks diindeks oleh indeks tunggal dalam urutan kolom-utama . Karena pengindeksan bersifat modular , entri-adalah 0
sudut kanan bawah (nilai 1
) dan -2
entri-adalah dua langkah di atas (nilai 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