클라크의 삼각형


10

좋아, 최근에 약간의 삼각형 킥이 있었으므로 여기 또 다른 것이 있습니다.

Clark 's Triangle은 각 행의 가장 왼쪽에있는 항목이 1이고 가장 오른쪽에있는 항목이 6의 배수로 구성되는 삼각형으로, 행 수가 증가함에 따라 증가합니다. 시각화는 다음과 같습니다

     1 6
    1 . 12
   1 . . 18
  1 . . . 24
 1 . . . . 30
1 . . . . . 36

파스칼의 삼각 지대와 마찬가지로 다른 모든 항목은 오른쪽 위와 왼쪽 위의 숫자의 합입니다.

여기에 채워진 처음 몇 행이 있습니다.

          1   6
        1   7  12
      1   8  19  18
    1   9  27  37  24
  1  10  36  64  61  30
1  11  46  100 125 91  36

직무

행 번호 (위에서 시작)와 열 번호 (해당 행의 0이 아닌 첫 번째 항목에서 시작)가 지정된 특정 셀의 값을 출력합니다. 두 입력 모두 1 또는 0 색인화 될 수 있습니다 (원하는 경우 혼합하여 일치시킬 수 있음). 삼각형의 경계를 벗어난 것은 정의되어 있지 않으므로 이러한 값을 쿼리 할 때 원하는대로 수행 할 수 있습니다.

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

OEIS A046902


1
첫 번째 행에 0으로 솔루션을 만들 수 있습니까? OEIS 시퀀스
에서처럼

1
@ JörgHülsermann 여기에 정의 된 삼각형의 범위를 벗어 났으므로 원하는대로 할 수 있습니다.
Ad Hoc Garf Hunter

답변:


7

MATL , 15 바이트

[lBB]i:"TTY+]i)

첫 번째 입력은 0 기반 행입니다. 두 번째는 1 기반 열입니다.

온라인으로 사용해보십시오!

설명

[lBB]   % Push [1 6 6]
i       % Input: row number (0-based)
:"      % Repeat that many times
  TT    %   Push [1 1]
  Y+    %   Convolution, increasing size. This computes the sum of overlapping
        %   pairs, including the endpoints. So for example [1 6 6] becomes
        %   [1 7 12 6], which will later become [1 8 19 18 6], ...
]       % End
i       % Input: column number (1-based)
)       % Use as index. Implicit display


5

CJam , 22 18 바이트

Martin Ender 덕분에 -4 바이트

X6_]ri{0X$+.+}*ri=

입력은 (0-based row) (0-based column)

온라인으로 사용해보십시오!

설명

X6_]  e# Push the list [1 6 6]. This is the first row, but each row will have an extra 6 at
      e# the end, which is out of bounds.
ri    e# Push the first input as an integer.
{     e# The following block calculates the next row given a row on top of the stack:
 0X$+ e#  Copy the top list on the stack and prepend 0.
 .+   e#  Element-wise addition with the list before prepending 0. This adds each element of
      e#  with the one to its left, except the initial 1 gets added to 0 and the final number
      e#  gets added to the out-of-bounds 6. The out-of-bounds 6 is unchanged since one list
      e#  is longer.
}*    e# Run this block (row index) times.
ri=   e# Get the (column index)th item of the final list.

페어 단위 합계를 얻는 다른 기술은 하나의 사본을 왼쪽으로 이동하고 사용하는 것 .+입니다. 일반적으로 후행 요소를 합산하지 않고 유지하는 문제가 있습니다 (제거 해야하는 바이트 비용). 그러나이 경우 실제로 반복 을 추가 할 필요가 없으므로 바이트를 절약 합니다 6. 0한 사본 에만 추가하면 왼쪽으로 이동하는 것이 자유롭기 때문에 더 많은 바이트를 절약 할 수 있습니다 .X6_]ri{0X$+.+}*ri=
Martin Ender

_0\+0X$+원하는 경우 대신 동일한 바이트 수입니다.
마틴 엔더

@MartinEnder 아시다시피, 각 행 끝에 여분의 6이있어 경계를 벗어 났으므로 중요하지 않습니다. 영리합니다. 감사합니다.
비즈니스 고양이



3

파이썬 3 , 64 60 52 바이트

f=lambda r,c:c<2or c>r and r*6or f(r-1,c-1)+f(r-1,c)

온라인으로 사용해보십시오!

1- 인덱싱을 사용한 재귀 솔루션. 골프를 위해 1 대신 "참"을 출력합니다.


덕분에 :

  • 4 바이트 절약을위한 @totallyhuman!
  • 8 바이트를 절약 한 @Rod!


2
if / else를 부울 연산자와보다 유연한 출력으로 대체하는 52 바이트
Rod

@로드, 이것은 훌륭한 솔루션입니다. 나는 왜 그것이 왜 작동하는지 내 머리를 감싸려고 노력하고 있습니다. 나는 여전히 여기에서 상당히 새롭습니다 (이 사이트의 두 번째 대답 일뿐입니다). 프로토콜에 대해 확신이 없습니다 .Python 3에서 2로 전환 했는데도 내 답변에 수정 사항을 포함시켜야합니까?
Chase Vogeli

3
이 경우 파이썬 버전은 @icosahedron과 관련이 없으므로 신경 쓰지 않아도됩니다. 일반적으로 기능을 악용하기 위해 파이썬 버전 간을 전환하는 것이 좋습니다.
Uriel

@ 우리엘은 설명을 주셔서 감사합니다.
Chase Vogeli


1

수학, 32 바이트

b=Binomial;b[#,#2-1]6+b[#-1,#2]&

입력

[행, 열]
[1- 인덱스, 0- 인덱스]


1

자바 스크립트 (ES6), 38 바이트

f=(r,c)=>c?r>c?f(--r,c)+f(r,--c):r*6:1

음수 열에 충돌이 발생하고 음수 행 또는 큰 열에 대해 6의 배수를 반환합니다.


1

C # (. NET 코어) , 44 바이트

f=(c,r)=>c<=1?1:c>r?6*r:f(c-1,r-1)+f(c,r-1);

1 인덱싱 된 열을 한 행씩 가져옵니다. 입력을 교환하여 행과 열을 취할 수 있습니다 (r,c). row * 6오른쪽 경계 바깥 쪽 좌표 (ie column > row + 1) 및 1왼쪽 경계 바깥 쪽 좌표 (ie )를 반환 합니다 column < 1.


1

PHP , 64 바이트

재귀 함수

행 1 인덱싱 열 0 인덱싱

OEIS 시퀀스에서와 같이 row = 0 및 column = 0에 대한 출력은 0입니다.

function f($r,$c){return$c-$r?$c?f($r-=1,$c-1)+f($r,$c):1:$r*6;}

온라인으로 사용해보십시오!

PHP , 126 바이트

행 1 인덱싱 열 0 인덱싱

OEIS 시퀀스에서와 같이 row = 0 및 column = 0에 대한 출력은 0입니다.

for(;$r<=$argv[1];$r++)for($z++,$c=~0;++$c<$z;)$t[+$r][$c]=$c<$r?$c?$t[$r-1][$c-1]+$t[$r-1][$c]:1:$r*6;echo$t[$r-1][$argv[2]];

온라인으로 사용해보십시오!


0

R , 77 바이트

Reduce(function(x,y)zoo::rollsum(c(0,x,6),2),double(scan()-1),c(1,6))[scan()]

zoo라이브러리가 필요합니다 . stdin (입력을 두 줄 바꿈으로 구분)에서 읽고 다음을 사용하여 값을 반환합니다.NA 범위를 벗어난 선택 .

온라인으로 사용해보십시오!


0

젤리 , 13 바이트

,"’U0¦c/x6,1S

[row, entry](항목에 대한 0 인덱싱, 행에 대한 1 인덱싱) 목록을 가져 와서 값을 반환 하는 모나드 링크 .

온라인으로 사용해보십시오!

어떻게?

,"’U0¦c/x6,1S - Link: list of numbers, [row, entry]
  ’           - decrement     -> [row-1, entry-1]
 "            - zip with:
,             -   pair        -> [[row, row-1], [entry, entry-1]]
     ¦        - sparse application of:
   U          -   upend
    0         - for indexes: 0 -> [[row, row-1], [entry-1, entry]]
       /      - reduce by:
      c       -   choose       -> [(row choose entry-1), (row-1 choose entry)]
         6,1  - 6 paired with 1 = [6,1]
        x     - times        i.e. [a, a, a, a, a, a, a, b]
            S - sum            -> 6*(row choose entry-1) + (row-1 choose entry)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.