Каталонські числа


36

У число Каталонський ( OEIS ) представляють собою послідовність натуральних чисел часто з'являються в комбінаториці.

П'яте каталонське число - це кількість слів Dyck (врівноважені рядки дужок або дужок, такі як [[][]]: формально визначається як рядок, що використовує два символи a і b, так що будь-яка підрядка, що починається з початку, має число символів більше або дорівнює числу символів b, і весь рядок має однакову кількість символів a і b) довжиною 2n. П'яте каталонське число (для 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...

Виклик

Напишіть повну програму або функцію, яка приймає невід'ємне ціле число n через STDIN або прийнятну альтернативу та виводить n-е каталонське число. Ваша програма повинна працювати як мінімум для входів 0-19.

I / O

Вхідні дані

Ваша програма повинна брати інформацію від STDIN, аргументів функції або будь-якої з прийнятних альтернатив для цього мета-повідомлення. Ви можете прочитати введене число у вигляді його стандартного десяткового представлення, одинарного подання чи байтів.

  • Якщо (і лише якщо) ваша мова не може приймати дані зі STDIN або будь-якої прийнятної альтернативи, вона може взяти введення з твердо кодованої змінної або відповідного еквівалента в програмі.

Вихідні дані

Ваша програма повинна вивести n-й номер каталонської мови в STDOUT, результат функції або будь-яку з прийнятних альтернатив для цього мета-повідомлення. Ви можете вивести номер Каталонії в його стандартному десятковому поданні, одинарному поданні або байтах.

Вихід повинен складатися з відповідного каталонського числа, необов'язково супроводжуючись одним або декількома новими рядками. Жодного іншого виводу не можна генерувати, крім постійного виводу інтерпретатора вашої мови, який не можна придушити (наприклад, привітання, кольорові коди ANSI або відступ).


Йдеться не про те, щоб знайти найкоротшу мову. Йдеться про пошук найкоротшої програми з усіх мов. Тому я не прийму відповіді.

У цьому виклику мови, новіші за виклики, є прийнятними , доки вони мають реалізацію. Дозволяється (і навіть заохочується) писати цього перекладача самостійно для раніше не виконаної мови. Крім цього, повинні дотримуватися всі стандартні правила . Подання на більшості мов оцінюватимуться в байтах у відповідному попередньому кодуванні (зазвичай UTF-8). Зауважте також, що вбудовані для обчислення n-го каталонського числа дозволені.

Каталог

Фрагмент стека внизу цієї публікації генерує каталог з відповідей а) як список найкоротших варіантів для кожної мови та б) як загальний таблиця лідерів.

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

## 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


Чи можемо ми роздрукувати / повернути флоат, а не ціле число?
Олексій А.

@AlexA. Це прийнятно.
спагето

Чи повинен бути тег oeis ?
Ві.

1
@Vi. Був мета розмову про те , що деякий час тому , і ми домовилися , що OEIS було непотрібним
в spaghetto

@Vi. Ось мета-повідомлення: meta.codegolf.stackexchange.com/a/5546/8478 . Що стосується деяких міркувань, ви можете знайти проблеми в стилі OEIS досить надійно з послідовністю та одним із чисел чи теорії чисел . Є дана послідовність дійсно знаходиться в OEIS, абсолютно не має відношення до проблеми.
Мартін Ендер

Відповіді:


26

С, 78 52 39 34 33 байт

Ще більше магії C (спасибі xsot):

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

?: є розширенням GNU .


Цього разу, розширивши рецидиви нижче (дякую xnor та Томасу Ква):

yet another recursion

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

-(n+1)замінюється на ~n, що еквівалентно двом доповненням і зберігає 4 байти.


Знову як функція, але цього разу використовуючи наступний повтор:

recur

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

c(n)вступає в нескінченну рекурсію за негативом n, хоча це не стосується цього виклику.


Оскільки виклик функції видається прийнятною альтернативою вводу / виводу консолі:

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);}

Замість прямого обчислення визначення, формула переписується як:

rewrite

Формула передбачає n >= 2, але код має n = 0і n = 1теж.

У C безладі вище, nі kвиконують ту ж роль, що і у формулі, при цьому cнакопичується продукт. Всі обчислення виконуються з використанням плаваючої точки double, що майже завжди є поганою ідеєю, але в цьому випадку результати вірні до n = 19, принаймні, так що це нормально.

float врятував би 1 байт, на жаль, це недостатньо точно.


Я зараз не можу перевірити це, але думаю, що ви можете його скоротити далі:c(n){return!n?:(4+6./~n)*c(n-1);}
xsot

Дякую @xsot, я не знав ?:! Мабуть, це розширення GNU C, але я думаю, воно все ще відповідає.
Стефано Санфіліппо

23

Желе , 4 байти

Ḥc÷‘

Спробуйте в Інтернеті!

Як це працює

Ḥc÷‘    Left argument: z

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

1
Що означає "гачок"? Як cдістається 2zі zяк його аргументи?
xnor

@xnor Гак означає функції, оцінені як f (x, g (x)). Коли є діадійна функція, за якою слідує інша діадійна функція, аналізатор оцінює першу як гачок.
lirtosiast

5
@Dennis Це справді 4 байти? З тими символами, які не належать до ASCII, mothereff.in/byte-counter каже 9 байт
Луїс Мендо

@LuisMendo це, мабуть, інше кодування
undergroundmonorail

3
@LuisMendo Jelly використовує свій власний, за замовчуванням кодування, де кожен символ є одним байтом. У UTF-8 вихідний код дійсно завдовжки 9 байт.
Денніс

11

CJam, 12 байт

ri_2,*e!,\)/

Спробуйте в Інтернеті.

Крім входу 11, вам потрібно буде сказати вашому Java VM, щоб використовувати більше пам'яті. І я б фактично не рекомендував перевищувати 11. Теоретично це працює для будь-якого N, оскільки CJam використовує цілі числа з довільною точністю.

Пояснення

CJam не має вбудованих біноміальних коефіцієнтів, а обчислення їх з трьох факторіалів займає багато байтів ... тому нам доведеться зробити щось краще, ніж це. :)

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
спагетто

Це розумно. Я спробував це з розрахунком фабрик. Потрібно лише два звичайних трьох, оскільки два з них однакові. Він все ще використовував 17 байт ( ri_2*m!1$m!_*/\)/) у моїй реалізації. Єдине добре, що це набагато швидше. :)
Ретро Кораді

11

Математика, 16 13 байт

CatalanNumber

Вбудовані, аміритові хлопці: /

Не вбудована версія (21 байт):

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

Біноміальна версія (25 байт):

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


10

Python 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, який зупиняється як 1коли, так n==0і в іншому випадку оцінює рекурсивний вираз справа. Побітний оператор ~n==-n-1скорочує знаменник і економить на паронах.

Python 3 використовується для його поплавкового поділу. Python 2 міг зробити те ж саме з ще одним байтом для запису 6..


Чому б не n<1, ніж 0**n?
feersum

@feersum Він повертається Trueдо , n==0а не 1. Звичайно, True == 1але True is not 1він друкує інакше. Я б очікував, що цього не дозволять. Чи знаєте ви, чи є у нас рішення щодо цього?
xnor

Я вважаю, що це добре. isinstance(True, int) is Trueпісля всього.
feersum

2
Я думаю, що це все ще неприємно в загальному випадку, і тим більше, де виклик визначає результат як число або його представлення. Але, до @quartata
xnor


7

пл, 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 байт

8 байт, змінивши факторі-ер з версії 1 на версію 2.

18 байт шляхом обчислення n!(n+1)!за один крок. В основному натхненний алгоритмом тесту на первинність Денніса .

Hexdump:

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-го ряду?
Кінтопія

Так, і це теж медіана. Отже, і те, і Mпрацювало б.
Mego

@Mego Я хвилююся щодо вашої реалізації медіани, якщо щось може бути як медіаною, так і макс. У тому випадку, якщо список не є однаковим числом. Якщо ви маєте на увазі "в середині списку", ви можете вибрати іншу назву для цього ...
quintopia

Так, це середина списку. Для відсортованих списків це типова статистична медіана, але для несортованих списків - це просто середина (або середня кількість 2 середніх елементів)
Mego

4

JavaScript (ES6), 24 байти

Виходячи з відповіді Python .

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)

Це анонімна функція, яка приймає ціле число і повертає поплавок. Тут використовується основна біноміальна формула. Щоб зателефонувати, дайте ім’я, наприклад f=n->....


4

Матлаб, 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 дякую за пораду! він працює лише в Octave, але не в Matlab, тому я розділив його на частини
вартість

@costrom Це цікаво. Я думаю .../++n, теж не працює. : /
стаканчик

4

𝔼𝕊𝕄𝕚𝕟, 3 символи / 6 байт

Мƅï

Try it here (Firefox only).

Вбудовані ftw! Тож радий, що я реалізував math.js на початку.

Бонусне рішення, 12 символів / 19 байт

Мơ 2*ï,ï)/⧺ï

Try it here (Firefox only).

Ай! 19-й байт!

Оцінюється в псевдо-ES6 як:

nchoosek(2*input,input)/(input+1)

3

Haskell, 27 байт

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

Рекурсивна формула. Має бути спосіб економити на паронах ...

Безпосередньо взяття продукту було на 2 байти довше:

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

Де ваш код читається зі stdin чи записується до stdout?
користувач2845840

2
@ user2845840 Функції - одна з прийнятних альтернатив, пов'язаних із специфікацією.
xnor

g(n-1)=> g$n-1зберігає один байт. Редагувати: насправді це не працює, тому що формула інтерпретується як (...*g) (n-1).
Відновіть Моніку

3

Діалог 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);}

Я використовував gcc (GCC) 3.4.4 (cygming special, gdc 0,12, використовуючи dmd 0,125) для компіляції у середовищі Windows cygwin. Введення надходить у командному рядку. Це схоже на рішення Python Sherlock9, але петлі об'єднуються в одну, щоб уникнути переповнення та отримати вихід до 20-го каталонського числа (n = 19).


1
Ви можете видалити пробіл після коми у mainвизначенні, щоб зберегти байт.
Олексій А.

Приємно, я зараз відредагую пост
cleblanc

Ви можете зберегти ще 2 байти, char**vа не char *v[]. (Пробіл раніше *не потрібен, а типи еквівалентні.)
Мат

Звичайно, це чудово працює. Спасибі Мат
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 не має значення - доки ви використовуєте перекладача, зробленого перед змаганням, все це добре і дійсно.
Аддісон Кримп

Не виграю все одно ^^
недолік

Це Java, так що так.
Rɪᴋᴇʀ

1
@Riker Ну, це гірше, ніж Java.
Якоб

2

Japt, 16 байт

Навіть математика коротша. :-/

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. c:

Спробуйте в Інтернеті!


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 байти

Використання рекурсії майже завжди - це шлях до Prolog.

Код:

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 не зовсім. Я визначаю новий діадичний предикат під назвою *. Я все ще можу використовувати звичайну арифметичну. У програмі вище M * Y - мій визначений предикат, тоді як (4-6 / (N + 1)) * Y - регулярне множення.
Емінья

Це трохи коротше, ніж писати це як p (X, Y): - що приємно для гольфу з кодом.
Емінья


2

Цейлон, 60 байт

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

Це спрацьовує до C 30 , оскільки цілочисники Цейлону мають 64-бітні числа (C 31) має переповнення, обчислюється як -4050872099593203).

Я не знаю, чи в Цейлоні є якісь вбудовані вищі математичні функції, але тоді імпорт правильного пакету, ймовірно, буде довше, ніж просто обчислити це пішки.

// 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.