다른 조합 가능


9

문제

값 n이 주어지면 참조 (0, 0)에서 (2n, 0)으로 새겨진 산 풍경을 상상해보십시오. 경사면 사이에는 공백이 없어야하며 산도 x 축 아래로 내려 가지 않습니다. 해결해야 할 문제는 다음과 같습니다 : 주어진 n (가로의 크기를 정의 함)과 피크 수 k (k는 항상 n보다 작거나 같음), k 피크로 몇 개의 산 조합이 가능합니까?

입력

가로의 너비를 나타내는 n과 피크 수인 k를 나타냅니다.

산출

가능한 조합의 수입니다.

n = 3이고 k = 2이면 답은 3 가지 조합입니다.

시각적 인 예를 들자면 다음과 같습니다.

   /\     /\      /\/\
/\/  \   /  \/\  /    \

6 (3 * 2) 위치와 2 개의 피크를 사용하여 가능한 3 가지 조합입니다.

편집 :-더 많은 예-

n  k  result
2  1  1
4  1  1
4  3  6
5  2  10

승리 조건

표준 규칙이 적용됩니다. 바이트 단위의 최단 제출이 이깁니다.


4
" n정확하게 k인스턴스 가 포함 된 일치하는 괄호 쌍 의 표현식 수를 찾는" "와 동일 ()합니까?
xnor


@ xnor 예입니다.
Jonathan Allan

4
Compute Narayana Numbers 와 같은보다 명확한 제목으로 도전 과제를 업데이트 할 수 있습니다 .
Arnauld

k0 의 입력을 처리 해야하는지 여부를 확인할 수 있습니까? 그렇다면 n0 과 같은 입력 ( k정의에 의한 0도)을 처리해야합니까?
Jonathan Allan

답변:



6

젤리 , 7 바이트

cⱮṫ-P÷⁸

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

n그때 와 같이 입력 을 k받습니다. 공식을 사용합니다

N(n,k)=1n(nk)(nk1)

Wikipedia 에서 찾았습니다 .

cⱮṫ-P÷⁸
c        Binomial coefficient of n and...
 Ɱ       each of 1..k
  ṫ-     Keep the last two. ṫ is tail, - is -1.
    P    Product of the two numbers.
     ÷   Divide by
      ⁸  n.

7 바이트

각 라인은 자체적으로 작동합니다.

,’$c@P÷
c@€ṫ-P÷

k그때 와 같이 입력 을 n받습니다.

7 바이트

cⱮ×ƝṪ÷⁸
  • 이것을위한 Jonathan Allan에게 감사합니다.

잠깐만 ... 꼬리는 자동으로 2 개의 숫자로 정의됩니까? (젤리를 전혀 몰라, 바보 같은 질문)
Quintec

@Quintec 두 가지 테일 기능이 있습니다. 단일 인수의 마지막 요소를 취하는 하나 ( )와 두 개의 인수를 취하는 하나 ( )를 사용 합니다. 주먹 인수는 목록이고, 두 번째는 (내 경우에는 숫자입니다 -1a로 표현되는 -코드)에 저장하는 방법을 많은 요소를 알려줍니다. 갖는 -1주고 두 요소 것은 정의하는 golfiest 방법이었다
dylnan

감사합니다! 나는 젤리가 골프를 위해 어떻게 만들어 졌는지 보라 ... hehe
Quintec

1
7 f (n, k)의 또 다른 변형 :cⱮ×ƝṪ÷⁸
Jonathan Allan

4

자바 스크립트 (ES6), 33 30 바이트

@Shaggy 덕분에 3 바이트 절약

로 입력을 (n)(k)받습니다.

n=>g=k=>--k?n*--n/-~k/k*g(k):1

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

Anders Kaseorg가 사용하는 재귀 적 정의를 구현합니다 .


자바 스크립트 (ES7), 59 58 49 45 바이트

로 입력을 (n)(k)받습니다.

n=>k=>k/n/(n-k+1)*(g=_=>k?n--/k--*g():1)()**2

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

계산 :

an,k=1k(n1k1)(nk1)=1n(nk)(nk1)=1n(nk)2×knk+1

A001263 (첫 번째 공식) 에서 파생됩니다 .


카레와 함께 -3 바이트 .
얽히고 설킨

@Shaggy Doh ... 감사합니다. 7 번 개정판은 마지막으로 1 번 개정판과 같아야합니다. : p
Arnauld

3

Wolfram Language (Mathematica) , 27 바이트

모두 같은 길이의 세 가지 버전 :

(b=Binomial)@##b[#,#2-1]/#&

Binomial@##^2#2/(#-#2+1)/#&

1/(Beta[#2,d=#-#2+1]^2d##)&

온라인으로 사용해보십시오! 첫 번째 버전이지만 다른 버전을 복사하여 붙여 넣을 수 있습니다.

이 모든 것들은 에서 변형 된 형태입니다. 나는 일종의 이항 역수 인 베타 기능으로 어딘가에 있기를 바랐지만, 너무 많은 분할이 발생했습니다.

n!(n1)!k!(k1)!(nk)!(nk1)!


2

J , 17 11 바이트

]%~!*<:@[!]

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

소요 n오른쪽 인수로 k왼쪽 하나. dylnan의 Jelly 답변 및 Quintec의 APL 솔루션과 동일한 공식을 사용합니다.

설명:

            ] - n  
           !  - choose
       <:@[   - k-1
      *       - multiplied by
     !        - n choose k
   %~         - divided by
  ]           - n   

2

APL (Dyalog), 19 18 16 12 바이트

⊢÷⍨!×⊢!⍨¯1+⊣

-4 바이트에 대한 @Galen Ivanov 덕분에

OEIS 시퀀스에서 ID를 사용합니다. 왼쪽에 k를, 오른쪽에 n을 갖습니다.

TIO


⊢÷⍨!×⊢!⍨¯1+⊣을위한 12 바이트 , 인수는 반전
갈렌 이바노프에게

@GalenIvanov 고마워, 내 암묵적인 APL은 매우 약하다
Quintec

내 APL이 좋지 않아서 J 솔루션 후에 시도해 볼 기회를 얻었습니다.)
Galen Ivanov



1

펄 6 , 33 바이트

{[*] ($^n-$^k X/(2..$k X-^2))X+1}

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

공식을 사용합니다

an,k=(n1k1)×1k(nk1)=i=1k1(nki+1)×i=2k(nki+1)

설명

{[*]                            }  # Product of
     ($^n-$^k X/                   # n-k divided by
                (2..$k X-^2))      # numbers in ranges [1,k-1], [2,k]
                             X+1   # plus one.

대체 버전, 39 바이트

{combinations(|@_)²/(1+[-] @_)/[/] @_}

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

Arnauld의 답변의 공식을 사용합니다.

an,k=1n(nk)2×knk+1



0

Stax , 9 바이트

ÇäO╪∙╜5‼O

실행 및 디버깅

나는 stax에서 dylnan의 공식을 사용하고 있습니다.

압축을 풀고 ungolfed하고 주석을 달면 프로그램은 다음과 같습니다.

        program begins with `n` and `k` on input stack
{       begin block for mapping
  [     duplicate 2nd element from top of stack (duplicates n)
  |C    combinatorial choose operation
m       map block over array, input k is implicitly converted to [1..k]
O       push integer one *underneath* mapped array
E       explode array onto stack
*       multiply top two elements - if array had only element, then the pushed one is used
,/      pop `n` from input stack and divide

이것을 실행


0

APL (NARS), 17 자, 34 바이트

{⍺÷⍨(⍵!⍺)×⍺!⍨⍵-1}

테스트:

  f←{⍺÷⍨(⍵!⍺)×⍺!⍨⍵-1}
  (2 f 1)(4 f 1)(4 f 3)(5 f 2)    
1 1 6 10 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.