삼각형을 만들 수 있습니다 셀의 값이

대부분의 사람들은 파스칼의 삼각형에 익숙합니다.

    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입니다 ). rn 보다 작다고 가정 할 수 있습니다 .

이것은 이며, 목표는 솔루션의 바이트 수를 최소화하는 것입니다.

테스트 사례

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)재귀를 사용합니다 .


답변