대부분의 사람들은 파스칼의 삼각형에 익숙합니다.
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
파스칼의 삼각형은 셀의 값이 왼쪽 상단과 오른쪽 상단에있는 셀의 합인 오토 마톤입니다. 이제 유사한 삼각형을 정의 할 것입니다. 셀을 왼쪽 상단과 오른쪽 상단으로 가져 오는 대신 왼쪽 상단과 오른쪽 상단으로 연장되는 두 개의 무한 선을 따라 모든 셀을 가져갑니다. 파스칼의 삼각형과 마찬가지로 우리 1
는 0으로 무한하게 채워진 단일부터 시작하여 아래쪽에서 아래쪽으로 쌓입니다.
예를 들어으로 표시된 셀을 계산하려면 x
1
1 1
2 2 2
4 5 5 4
x
우리는 다음 셀을 합산합니다
.
. .
2 . 2
. 5 5 .
x
우리의 새로운 세포 만들기 14
.
직무
주어진 행 번호 ( n )와 왼쪽으로부터의 거리 ( r ) 는 n 번째 행 의 왼쪽에서 0이 아닌 r 번째 항목을 계산하여 출력합니다 . (파스칼의 삼각형에 해당하는 것은 nCr입니다 ). r 이 n 보다 작다고 가정 할 수 있습니다 .
이것은 code-golf 이며, 목표는 솔루션의 바이트 수를 최소화하는 것입니다.
테스트 사례
0,0 -> 1
1,0 -> 1
2,0 -> 2
4,2 -> 14
6,3 -> 106
다음은 삼각형 형태의 첫 번째 커플 행입니다.
1
1 1
2 2 2
4 5 5 4
8 12 14 12 8
16 28 37 37 28 16
32 64 94 106 94 64 32
64 144 232 289 289 232 144 64
128 320 560 760 838 760 560 320 128
답변
젤리 , 18 17 바이트
SṚ0;+Sṭ
1WWÇ⁸¡ṪṙḢ
0 기반 인덱싱을 사용합니다.
작동 원리
1WWÇ⁸¡ṪṙḢ Main link. Arguments: n, r
1 Set the return value to 1.
W Wrap; yield [1].
W Wrap; yield [[1]].
This is the triangle with one row.
Ç⁸¡ Call the helper link n times.
Each iteration adds one row to the triangle.
Ṫ Tail; take the last array, i.e., the row n of the triangle.
ṙ Rotate row n r units to the left.
Ḣ Head; take the first element, i.e., entry r of row n.
SṚ0;+Sṭ Helper link. Argument: T (triangle)
S Take the column-wise sums, i.e., sum the ascending diagonals of the
centered triangle, left to right.
Ṛ Reverse the array of sums. The result is equal to the sums of the
descending diagonals of the centered triangle, also left to right.
0; Prepend a 0. This is required because the first element of the next row
doesn't have a descending diagonal.
S Take the column-wise sum of T.
+ Add the ascending to the descending diagonals.
답변
파이썬 3 , 72 바이트
Kritixi Lithos 덕분에 1 바이트
f=lambda n,r:n>=r>=0and(0**n or sum(f(i,r)+f(i,r+i-n)for i in range(n)))
답변
ES6, 80 78 바이트
p=(n,r,c=0)=>n?(o=>{while(n&&r<n)c+=p(--n,r);while(o*r)c+=p(--o,--r)})(n)||c:1
Arnauld 덕분에 2 바이트.
답변
PHP , 94 바이트
재귀적인 방식으로 인덱스
function f($r,$c){for($s=$r|$c?$r<0?0:!$t=1:1;$t&&$r;)$s+=f($r-=1,$c)+f($r,$c-++$i);return$s;}
PHP , 125 바이트
0 인덱스
for(;$r<=$argv[1];$r++)for($z++,$c=~0;++$c<$z;$v+=$l)$x[$c]+=$t[+$r][$c]=$l=($v=&$y[$r-$c])+$x[$c]?:1;echo$t[$r-1][$argv[2]];
PHP> = 7.1, 159 바이트
50 개가 넘는 행에 대해 0- 인덱싱
for([,$m,$n]=$argv;$r<=$m;$r++)for($z++,$c=0;$c<$z;$v=bcadd($v,$l),$x[$c]=bcadd($x[$c],$l),$c++)$t[+$r][$c]=$l=bcadd(($v=&$y[$r-$c]),$x[$c])?:1;echo$t[$m][$n];
답변
파이썬 3 , 61 바이트
f=lambda n,r:sum(f(k,r)+f(k,r+k-n)for k in range(n))or~n<-r<1
이 반환 진정한 기본 케이스 (0, 0) 입니다, 기본적으로 허용 .
답변
파스칼 , 145 바이트
function f(n,k:integer):integer;var i,r:integer;begin r:=1-Ord((k<0)or(k>n));if n>0 then r:=0;for i:=1 to n do r:=r+f(n-i,k-i)+f(n-i,k);f:=r;end;
T(n, r) = T(n-1, r-1) + T(n-1, r)
재귀를 사용합니다 .