MATL , 22 20 19 바이트
Ti:"2Y6Y+FT_Y)]!i_)
두 입력 모두 0 기반입니다.
온라인으로 사용해보십시오!
설명
하자 r
및 c
각각 0 기반의 행과 열을 지정하는 두 개의 입력을 나타낸다.
파스칼의 마름모의 각 새 행에 의해 이전의 두 행을 포함하는 행렬로부터 만들어 질 수 컨볼 루션 커널과 [1 1 1; 0 1 0]
및 교환 결과의 마지막 두 행을 유지. 이것은 r
matrix에서 시작하여 수행됩니다 1
.
[0 1 0; 1 1 1; 0 1 0]
사전 정의 된 리터럴 인 kernel을 사용하는 것이 더 짧습니다 . 이것은 추가 행을 생성하여 버려집니다.
예를 들어 고려 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 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