카탈로니아 어 숫자


36

카탈루냐어 번호 ( OEIS는 ) 종종 조합론에 나타나는 자연수의 순서입니다.

n 번째 카탈로니아 어 숫자는 Dyck 단어 (괄호 또는 괄호의 균형 문자열)입니다 [[][]].; 처음부터 시작하는 모든 하위 문자열이 숫자보다 크거나 같은 문자 수를 갖도록 두 문자 a와 b를 사용하여 문자열로 공식적으로 정의됩니다. 길이가 2n 인 전체 문자열의 a 및 b 문자 수가 동일합니다. n 번째 카탈로니아 어 숫자 (n> = 0의 경우)는 다음과 같이 명시 적으로 정의됩니다.

n = 0에서 시작하여 처음 20 개의 카탈로니아 어 숫자는 다음과 같습니다.

1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190...

도전

STDIN 또는 허용되는 대안을 통해 음이 아닌 정수 n을 취하고 n 번째 카탈로니아 어 숫자를 출력하는 전체 프로그램 또는 함수를 작성하십시오. 입력 0-19에 대해 프로그램이 최소한 작동해야합니다.

I / O

입력

귀하의 프로그램은 STDIN, 함수 인수 또는 이 메타 포스트마다 허용되는 대체 항목을 입력해야합니다 . 입력 한 숫자를 표준 10 진수 표현, 단항 표현 또는 바이트로 읽을 수 있습니다.

  • 귀하의 언어가 STDIN 또는 기타 수용 가능한 대안에서 입력을받을 수없는 경우, 하드 코딩 된 변수 또는 프로그램에서 적절한 동등한 입력을받을 수 있습니다.

산출

귀하의 프로그램은 n 번째 카탈로니아 어 번호를 STDOUT, 함수 결과 또는 이 메타 포스트에 허용되는 대안으로 출력해야합니다 . 표준 10 진수 표현, 단항 표현 또는 바이트로 카탈로니아 어 숫자를 출력 할 수 있습니다.

출력은 적절한 카탈로니아 어 번호로 구성되고 선택적으로 하나 이상의 줄 바꿈이 뒤 따릅니다. 인사말, ANSI 색상 코드 또는 들여 쓰기 등 억제 할 수없는 언어 해석기의 일정한 출력을 제외하고는 다른 출력을 생성 할 수 없습니다.


이것은 가장 짧은 언어를 찾는 것이 아닙니다. 모든 언어에서 가장 짧은 프로그램을 찾는 것입니다. 따라서 답변을받지 않습니다.

이 도전에서, 도전보다 새로운 언어 는 구현이있는 한 수용 가능 합니다. 이전에 구현되지 않은 언어에 대해이 통역사를 직접 작성할 수 있습니다. 그 외에도 의 모든 표준 규칙을 준수해야합니다. 대부분의 언어로 된 제출물은 적절한 기존 인코딩 (보통 UTF-8)으로 바이트 단위로 채점됩니다. n 번째 카탈로니아 어 수 계산을위한 내장 기능도 허용됩니다.

목록

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 a) 언어 당 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

## Ruby, <s>104</s> <s>101</s> 96 bytes

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

## Perl, 43 + 2 (-p flag) = 45 bytes

언어 이름을 링크로 만들면 스 니펫에 표시됩니다.

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


정수가 아닌 float를 인쇄 / 반환 할 수 있습니까?
Alex A.

@AlexA. 허용됩니다.
스파게티

태그가 있을까요 ?
Vi.

1
@Vi. 우리가 동의 백 동안 그 것을에 대한 메타 토론이 있었다 oeis가 불필요
spaghetto은

@Vi. meta post : meta.codegolf.stackexchange.com/a/5546/8478 입니다. 어떤 추론에 대해서는 순서숫자 또는 수 이론 중 하나를 사용 하여 OEIS 스타일의 과제를 매우 안정적으로 찾을 수 있습니다 . 주어진 순서가 실제로 있는지 여부 입니다 OEIS에 도전 완전히 무관하다.
Martin Ender

답변:


26

C, 78 52 39 34 33 바이트

더 많은 C 마술 (xsot 덕분에) :

c(n){return!n?:(4+6./~n)*c(n-1);}

?: GNU 확장 입니다.


이번에는 재발을 확장하여 xnor와 Thomas Kwa에게 감사드립니다.

또 다른 재귀

c(n){return n?(4+6./~n)*c(n-1):1;}

-(n+1)~n2의 보수와 동일하며 4 바이트를 절약하는 로 대체됩니다 .


다시 함수로 사용하지만 이번에는 다음과 같은 반복을 이용합니다.

되풀이

c(n){return n?2.*(2*n++-1)/n*c(n-2):1;}

c(n)n이 도전과 관련이 없지만 negative에 대한 무한 재귀를 입력합니다 .


함수 호출은 콘솔 I / O에 대한 대체 대안으로 보일 수 있습니다.

c(n){double c=1,k=2;while(k<=n)c*=1+n/k++;return c;}

c(n)를 사용 int하고를 반환합니다 int.


원래 항목 :

main(n){scanf("%d",&n);double c=1,k=2;while(k<=n)c*=1+n/k++;printf("%.0f",c);}

정의를 직접 계산하는 대신 공식은 다음과 같이 다시 작성됩니다.

고쳐 쓰기

공식은 가정 n >= 2,하지만 코드를 차지하는 n = 0n = 1도.

상기 C 혼란에서 n그리고 k동시에, 수식과 동일한 역할을 c하는 제품을 축적한다. 모든 계산 double은 거의 항상 나쁜 생각 인을 사용하여 부동 소수점으로 수행 되지만이 경우 결과는 적어도 n = 19까지 정확하므로 괜찮습니다.

float 불행히도 1 바이트를 절약했을 것입니다. 정확하지 않습니다.


나는 이것을 지금 테스트 할 수는 없지만 더 짧게 할 수 있다고 생각합니다.c(n){return!n?:(4+6./~n)*c(n-1);}
xsot

감사합니다 @xsot, 몰랐어요 ?:! 분명히, 그것은 GNU C 확장이지만 여전히 자격이 있다고 생각합니다.
Stefano Sanfilippo

23

젤리 , 4 바이트

Ḥc÷‘

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

작동 원리

Ḥc÷‘    Left argument: z

Ḥ       Compute 2z.
 c      Hook; apply combinations to 2z and z.
  ÷‘    Divide the result by z+1.

1
무엇 "을 수행 후크 '의미 하는가 어떻게? c2zz인수 등?
XNOR

@xnor 후크는 f (x, g (x))와 같이 평가 된 함수를 의미합니다. dyadic 함수 뒤에 다른 dyadic 함수가 있으면 구문 분석기는 첫 번째 함수를 후크로 평가합니다.
lirtosiast

5
@Dennis 정말 4 바이트입니까? 그 비 ASCII 문자, mothereff.in/byte-counter는 9 바이트 말한다
루이스 Mendo

@LuisMendo 아마 다른 인코딩 일 것입니다
undergroundmonorail

3
@LuisMendo Jelly는 고유 한 사용자 지정 인코딩 기본값을 사용합니다. 여기서 각 문자는 단일 바이트입니다. UTF-8을 사용하면 소스 코드의 길이는 실제로 9 바이트입니다.
Dennis

11

CJam, 12 바이트

ri_2,*e!,\)/

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

입력 11 외에도 더 많은 메모리를 사용하도록 Java VM에 지시해야합니다. 그리고 실제로 11을 넘어서는 것을 권장하지 않습니다. 이론적으로 CJam은 임의의 정수를 사용하기 때문에 N에 작동합니다.

설명

CJam에는 이항 계수에 대한 기본 제공 기능이 없으며 3 개의 계승에서 계산하는 데 많은 바이트가 필요하므로 그보다 더 나은 작업을 수행해야합니다. :)

ri  e# Read input and convert it to integer N.
_   e# Duplicate.
2,  e# Push [0 1].
*   e# Repeat this N times, giving [0 1 0 1 ... 0 1] with N zeros and N ones.
e!  e# Compute the _distinct_ permutations of this array.
,   e# Get the number of permutations - the binomial. There happen to be 2n-over-n of
    e# of them. (Since 2n-over-n is the number of ways to choose n elements out of 2n, and
    e# and here we're choosing n positions in a 2n-element array to place the zeros in.)
\   e# Swap with N.
)/  e# Increment and divide the binomial coefficient by N+1.

정말 멋지다. +1
스파게티

이것은 영리합니다. 계승을 계산하여 시도했습니다. 두 개가 동일하기 때문에 일반적인 세 ​​개 중 두 개만 걸립니다. ri_2*m!1$m!_*/\)/내 구현에서 여전히 17 바이트 ( )를 사용했습니다. 유일한 장점은 훨씬 빠릅니다. :)
Reto Koradi

11

수학, 16 13 바이트

CatalanNumber

내장, amirite fellas : /

내장되지 않은 버전 (21 바이트) :

Binomial[2#,#]/(#+1)&

이항이없는 버전 (25 바이트) :

Product[(#+k)/k,{k,2,#}]&

10

TI-BASIC, 11 바이트

(2Ans) nCr Ans/(Ans+1

이상하게도 nCr은 곱셈보다 우선 순위가 높습니다.


10

파이썬 3, 33 바이트

f=lambda n:0**n or(4+6/~n)*f(n-1)

재발을 사용합니다

f(0) = 1
f(n) = (4-6/(n+1)) * f(n-1)

0의 기본 사례는로 처리되며 오른쪽에서 재귀 표현식을 평가할 때 0**n or중지됩니다 . 비트 연산자 는 분모를 짧게하고 괄호를 절약합니다.1n==0~n==-n-1

파이썬 3은 float 나누기에 사용됩니다. 파이썬 2는 하나 이상의 바이트를 써서 동일한 작업을 수행 할 수 6.있습니다.


n<1이 아니라 0**n?
feersum

@feersum 대신에 리턴 True합니다 . 물론 그러나 다르게 인쇄됩니다. 나는 이것이 허용되지 않을 것으로 기대합니다. 우리가 이것에 대해 판결을 내 렸는지 알고 있습니까? n==01True == 1True is not 1
xnor

나는 그것이 좋다고 믿는다. isinstance(True, int) is True아무튼.
feersum

2
나는 일반적인 경우에는 여전히 문제가 있으며, 여기서 도전은 출력을 숫자 또는 표현으로 지정합니다. 그러나 @quartata까지
xnor


7

pl, 4 바이트

☼ç▲÷

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

설명

pl에서 함수는 인수를 스택에서 빼고 결과를 스택으로 다시 밀어 넣습니다. 일반적으로 스택에 인수가 충분하지 않으면 함수가 자동으로 실패합니다. 그러나 스택의 인수의 양이 함수의 특성과 다른 경우 특별한 일이 발생합니다. 입력 변수 _가 인수 목록에 추가됩니다.

☼ç▲÷

☼      double: takes _ as the argument since there is nothing on the stack
 ç     combinations: since there is only one item on the stack (and arity is 2), it adds _ to the argument list (combinations(2_,_))
  ▲    increment last used var (_)
   ÷   divide: adds _ to the argument list again

실제로 이것은 의사 코드입니다.

divide(combinations(double(_),_),_+1);

6

Sesos , 94 86 68 바이트

factorial-er를 버전 1에서 버전 2로 변경하여 8 바이트

n!(n+1)!한 단계 로 계산 하여 18 바이트 . Dennis의 우선 성 테스트 알고리즘에서 주로 영감을 얻습니다 .

16 진 덤프 :

0000000: 16f8de a59f17 a0ebba 7f4cd3 e05f3f cf0fd0 a0ebde  ..........L.._?......
0000015: b1c1bb 76fe18 8cc1bb 76fe1c e0fbda 390fda bde3d8  ...v.....v.....9.....
000002a: 000fbe af9d1b b47bc7 cfc11c b47bc7 cff1fa e07bda  .......{.....{.....{.
000003f: 39e83e cf07                                       9.>..

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

수식을 사용합니다 a(n) = (2n)! / (n!(n+1)!).

  • 계승 : 버전 1 ( 정확한 메모리), 버전 2 (정확한, 선형 메모리)
  • 승수 : 여기 (정확한 메모리)
  • 분배기 : 여기 (분할 할 수없는 경우 정지하지 않음)

어셈블러

set numin
set numout
get
jmp,sub 1,fwd 1,add 1,fwd 2,add 2,rwd 3,jnz
fwd 1,add 1
jmp
  jmp,sub 1,rwd 1,add 1,rwd 1,add 1,rwd 1,add 1,fwd 3,jnz
  rwd 1,sub 1,rwd 1,sub 1,rwd 1
  jmp,sub 1,fwd 3,add 1,rwd 3,jnz
  fwd 1
jnz
fwd 3
jmp
  jmp
    sub 1,rwd 1
    jmp,sub 1,rwd 1,add 1,rwd 1,add 1,fwd 2,jnz
    rwd 2
    jmp,sub 1,fwd 2,add 1,rwd 2,jnz
    fwd 3
  jnz
  rwd 1
  jmp,sub 1,jnz
  rwd 1
  jmp,sub 1,fwd 2,add 1,rwd 2,jnz
  fwd 3
jnz 
fwd 1
jmp
  jmp,sub 1,fwd 1,add 1,fwd 1,add 1,rwd 2,jnz
  fwd 1,sub 1,fwd 1
  jmp,sub 1,rwd 2,add 1,fwd 2,jnz
  rwd 1
jnz
rwd 2
jmp
  jmp
    sub 1,fwd 1
    jmp,sub 1,fwd 1,add 1,fwd 1,add 1,rwd 2,jnz
    fwd 2
    jmp,sub 1,rwd 2,add 1,fwd 2,jnz
    rwd 3
  jnz
  fwd 1
  jmp,sub 1,jnz
  fwd 1
  jmp,sub 1,rwd 2,add 1,fwd 2,jnz
  rwd 3
jnz 
fwd 1
jmp
  fwd 1,add 1,rwd 3
  jmp,sub 1,fwd 1,add 1,fwd 1,sub 1,rwd 2,jnz
  fwd 1
  jmp,sub 1,rwd 1,add 1,fwd 1,jnz
  fwd 1
jnz
fwd 1
put

Brainfuck 해당

이 Retina 스크립트 는 이와 동등한 것을 생성하는 데 사용됩니다. 명령 인수로 한 자리 숫자 만 허용하며 주석에 명령이 있는지 확인하지 않습니다.

[->+>>++<<<]>+
[[-<+<+<+>>>]<-<-<[->>>+<<<]>]>>>
[[-<[-<+<+>>]<<[->>+<<]>>>]<[-]<[->>+<<]>>>]>
[[->+>+<<]>->[-<<+>>]<]<<
[[->[->+>+<<]>>[-<<+>>]<<<]>[-]>[-<<+>>]<<<]>
[>+<<<[->+>-<<]>[-<+>]>]>


5

정말 9 바이트

,;;u)τ╣E\

육각 덤프 :

2c3b3b7529e7b9455c

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

설명:

,                   Read in evaluated input n
 ;;                 Duplicate it twice
   u)               Increment n and rotate it to bottom of stack
     τ╣             Double n, then push 2n-th row of Pascal's triangle
       E            Look-up nth element of the row, and so push 2nCn
        \           Divide it by the n+1 below it.

파스칼의 삼각형의 행이 대칭이라는 사실을 이용하여 바이트를 절약 할 수 있으므로 세 2n번째 행 의 중앙값은 입니다 C(2n,n). 따라서 : ,;u@τ╣║/8 바이트의 경우.
Mego

뭐? 2nCn이 2 번째 행의 최대 값이 아닙니까?
quintopia

예, 또한 중앙값입니다. 그래서, 모두 M작동합니다.
Mego

@Mego 목록이 모두 같은 숫자가 아닌 경우 중간 값과 최대 값이 모두 될 수있는 경우 중간 값 구현에 대해 걱정합니다. 당신은 "목록의 중간에"의미하는 경우에 당신은 ... 그것을 위해 다른 이름을 선택할 수 있습니다
quintopia

예, 목록의 중간입니다. 정렬 된 목록의 경우 일반적인 통계 중앙값이지만 정렬되지 않은 목록의 경우 중간 (또는 평균 2 개의 중간 요소)입니다.
Mego

4

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

파이썬 답변을 기반으로합니다 .

c=x=>x?(4+6/~x)*c(x-1):1

작동 원리

c=x=>x?(4+6/~x)*c(x-1):1
c=x=>                     // Define a function c that takes a parameter x and returns:
     x?               :1  //  If x == 0, 1.
       (4+6/~x)           //  Otherwise, (4 + (6 / (-x - 1)))
               *c(x-1)    //  times the previous item in the sequence.

나는 이것이 가장 짧은 것이라고 생각하지만 제안은 환영합니다!


4

줄리아, 23 바이트

n->binomial(2n,n)/(n+1)

이것은 정수를 받아들이고 float를 반환하는 익명 함수입니다. 기본 이항 공식을 사용합니다. 호출하려면 이름을 지정하십시오 (예 :) f=n->....


4

Matlab, 35 25 바이트

@(n)nchoosek(2*n,n)/(n+1)

옥타브, 23 바이트

@(n)nchoosek(2*n,n++)/n

2
@(n)함수 대신 사용할 수 있으며 익명 함수는 괜찮습니다.
FryAmTheEggman

작업 공간 변수에 액세스하기 전에 여기에서 몇 가지 답변을 보았습니다 (사용자가 다른 곳에서 이미 설정 한 것을 의미 함). MATLAB / Octave의 스크립트는 간단한 스 니펫으로 나타날 수도 있습니다. 나는 지금 그것을 함수로 다시 만들었습니다.
costrom

1
후행 증가하여 2 바이트를 더 늘릴 수 있습니다 n.@(n)nchoosek(2*n,n++)/n
beaker

@beaker 팁 주셔서 감사합니다! 그것은 단지,하지만하지 matlab에 옥타브에서 작동 그래서 분리 한 분할이
costrom

@costrom 흥미 롭습니다. 나도 .../++n작동하지 않는 것 같아 . : /
beaker


3

하스켈, 27 바이트

g 0=1
g n=(4-6/(n+1))*g(n-1)

재귀 수식. Parens를 절약 할 수있는 방법이 있어야합니다 ...

직접 제품을 가져가는 것이 2 바이트 길었습니다.

g n=product[4-6/i|i<-[2..n+1]]

코드가 stdin에서 읽거나 stdout에 쓰는 곳은 어디입니까?
user2845840

2
@ user2845840 함수는 사양에 링크 된 적절한 대안 중 하나입니다 .
xnor

g(n-1)=> g$n-1는 1 바이트를 저장합니다. 편집 : 실제로는 수식이로 해석되기 때문에 작동하지 않습니다 (...*g) (n-1).
Solomonoff의 비밀

3

Dyalog APL, 9 바이트

+∘1÷⍨⊢!+⍨

이것은 모나 딕 열차입니다. (2x nCr x) / (x + 1) 공식을 사용합니다. 여기에서 온라인으로 사용해보십시오 .


3

C, 122 121 119 108 바이트

main(j,v)char**v;{long long p=1,i,n=atoi(v[1]);for(j=0,i=n+1;i<2*n;p=(p*++i)/++j);p=n?p/n:p;printf("%d",p);}

Windows cygwin 환경에서 컴파일하기 위해 gcc (GCC) 3.4.4 (사이클링 특수, gdc 0.12, dmd 0.125 사용)를 사용했습니다. 명령 행에 입력이 들어옵니다. Sherlock9의 Python 솔루션과 비슷하지만 오버플로를 피하고 최대 20 번째 카탈로니아 어 수 (n = 19)로 출력되도록 루프가 하나로 결합됩니다.


1
main정의 에서 쉼표 뒤의 공백을 제거하여 바이트를 저장할 수 있습니다.
Alex A.

좋아요, 지금 글을 편집하겠습니다
cleblanc

char**v대신 2 바이트를 더 절약 할 수 있습니다 char *v[]. (이전 공간 *은 필요하지 않으며 유형은 동일합니다.)
Mat

물론 충분합니다. 감사합니다 매트
cleblanc

이는 으로부터 몇 가지 물건을 사용 을 단축하는 페이지입니다. Ideone의 경우에 대한 값을 하드 코딩했습니다 n.
FryAmTheEggman

3

자바 , 223 바이트

public class C{public static int f(int a,int b){try{int z=1/(b-a);}catch(Exception e){return 1;}return a*f(a+1,b);}public static void main(String[]s){int m=Integer.parseInt(s[0])+1;System.out.println(f(m,2*m-1)/f(1,m)/m);}}

완전히 확장 :

public class C {
    public static int f(int a,int b){
        try {
            int z=1/(b-a);
        } catch (Exception e){
            return 1;
        }
        return a*f(a+1,b);
    }
    public static void main(String[] s){
        int m=Integer.parseInt(s[0])+1;
        System.out.println(f(m,2*m-1)/f(1,m)/m);
    }
}

Esolangs 출품작은 중요하지 않습니다-대회 전에 작성된 통역사를 사용하는 한, 그것은 모두 유효하고 유효합니다.
Addison Crump

어쨌든 이길 수 없습니다 ^^
flawr

자바입니다.
Rɪᴋᴇʀ

1
@Riker 글쎄, Java보다 나쁘다.
Jakob

2

apt, 16 바이트

Mathematica조차 더 짧습니다. :-/

U*2ª1 o àU l /°U

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

언 골프와 설명

U*2ª 1 o àU l /° U
U*2||1 o àU l /++U

         // Implicit: U = input number
U*2||1   // Take U*2. If it is zero, take 1.
o àU     // Generate a range of this length, and calculate all combinations of length U.
l /++U   // Take the length of the result and divide by (U+1).
         // Implicit: output result

재귀 공식을 기반으로 한 대체 버전 :

C=_?(4+6/~Z *C$(Z-1):1};$C(U

2

비츠 , 13 바이트

VV2*FVF/V1+F/
V              Capture the input as a final global variable.
 V             Push it back.
  2*           Multiply it by 2
    F          Factorial.
     VF        Factorial of the input.
       /       Divide the second to top by the first.
        V1+    1+input
           F   Factorial.
            /  Divide.

이것은 Vitsy 의 함수입니다 . 이를 수행하는 프로그램으로 만드는 방법은 무엇입니까? 연결하십시오 N. 씨:

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


2

은하수 1.5.14 , 14 바이트

':2K;*Ny;1+/A!

설명

'               # read input from the command line
 :              # duplicate the TOS
  2      1      # push integer to the stack
   K            # push a Pythonic range(0, TOS) as a list
    ;   ;       # swap the TOS and the STOS
     *          # multiply the TOS and STOS
      N         # push a list of the permutations of the TOS (for lists)
       y        # push the length of the TOS
          +     # add the STOS to the TOS
           /    # divide the TOS by the STOS
            A   # push the integer representation of the TOS
             !  # output the TOS

또는, 또는, 훨씬 더 효율적 버전 :


은하수 1.5.14 , 22 바이트

'1%{;K£1+k1-6;/4+*}A!

설명

'                      # read input from the command line
 1     1  1 6  4       # push integer to the stack
  %{  £           }    # for loop
    ;        ;         # swap the TOS and the STOS
     K                 # push a Pythonic range(0, TOS) as a list
        +       +      # add the TOS and STOS
         k             # push the negative absolute value of the TOS
           -           # subtract the STOS from the TOS
              /        # divide the TOS by the STOS
                 *     # multiply the TOS and the STOS
                   A   # push the integer representation of the TOS
                    !  # output the TOS

용법

python3 milkyway.py <path-to-code> -i <input-integer>

2

Clojure / ClojureScript, 53 바이트

(defn c[x](if(= 0 x)1(*(c(dec x))(- 4(/ 6(inc x))))))

Clojure는 골프를 즐기기에 매우 실망 스러울 수 있습니다. 여전히 가독성이 높지만 매우 까다 롭지 만 멋진 기능 중 일부는 정말 장황합니다. (inc x)보다 관용적이며 (+ x 1)간결한 느낌이 들지만 실제로 문자를 저장하지는 않습니다. 그리고 운영 체인을 작성 (->> x inc (/ 6) (- 4))하는 것이보다 좋지만 실제로는 추악한 방식보다 더 오래 걸립니다.


2

프롤로그, 42 바이트

재귀 사용은 거의 항상 프롤로그와 함께하는 방법입니다.

암호:

0*1.
N*X:-M is N-1,M*Y,X is(4-6/(N+1))*Y.

예:

19*X.
X = 1767263190.0

여기에서 온라인으로 사용해보십시오


*여기서 기호 를 재정의하고 있습니까?
Paŭlo Ebermann

@ PaŭloEbermann은 정확하지 않습니다. *라는 새로운 dyadic 술어를 정의하고 있습니다. 나는 여전히 정규 산술을 사용할 수 있습니다. 위의 프로그램에서 M * Y는 정의 된 술어이고 (4-6 / (N + 1)) * Y는 규칙적인 곱셈입니다.
Emigna

코드 골프에 좋은 p (X, Y) :-로 작성하는 것보다 약간 짧습니다.
Emigna


2

실론, 60 바이트

Integer c(Integer n)=>(1:n).fold(1)((p,i)=>p*(n+i)/i)/(n+1);

이것은 C까지 작동 (30) 실론의 정수 (C 64 비트 숫자를 서명으로, 31 , -4050872099593203으로 계산됩니다 오버 플로우가 있습니다).

Ceylon에 더 높은 수학적 함수가 내장되어 있는지는 모르겠지만 올바른 패키지를 가져 오면 도보로 계산하는 것보다 오래 걸릴 것입니다.

// Catalan number C_n
//
// Question:  http://codegolf.stackexchange.com/q/66127/2338
// My answer: http://codegolf.stackexchange.com/a/66425/2338

Integer c(Integer n) =>
        // sequence of length n, starting at 1.
        (1:n)
        // starting with 1, for each element i, multiply the result
        // of the previous step by (n+i) and then divide it by i.
    .fold(1)((p, i) => p * (n + i) / i)
        // divide the result by n+1.
        / (n + 1);

2

R, 35 28 16 바이트

numbers::catalan

편집 : 내장 숫자 패키지를 사용하십시오.



2

05AB1E , 6 바이트

Dxcr>/

설명:

Code:     Stack:               Explanation:

Dxcr>/

D         [n, n]               # Duplicate of the stack. Since it's empty, input is used.
 x        [n, n, 2n]           # Pops a, pushes a, a * 2
  c       [n, n nCr 2n]        # Pops a,b pushes a nCr b
   r      [n nCr 2n, n]        # Reverses the stack
    >     [n nCr 2n, n + 1]    # Increment on the last item
     /    [(n nCr 2n)/(n + 1)] # Divides the last two items
                               # Implicit, nothing has printed, so we print the last item

2

R, 28 바이트

패키지를 사용하지 않으므로 이전 답변보다 약간 길다

choose(2*(n=scan()),n)/(n+1)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.