Можливі різні комбінації


9

Проблема

Давши значення n, уявіть гірський пейзаж, вписаний у посиланнях (0, 0) до (2n, 0). Між схилами не повинно бути білих проміжків, а також гірський мус не опускається нижче осі x. Проблема, яку слід вирішити, є: задані n (що визначає розмір ландшафту) та кількість k вершин (k завжди менше або дорівнює n), скільки комбінацій гір можливі з k вершинами?

Вхідні дані

n, який представляє ширину ландшафту, і k - кількість вершин.

Вихідні дані

Просто кількість можливих комбінацій.

Приклад

З огляду на n = 3 і k = 2, відповідь - 3 комбінації.

Просто для наочного прикладу вони є такими:

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

3 можливі комбінації з використанням 6 (3 * 2) позицій та 2 піків.

Редагувати: - більше прикладів -

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

Умова виграшу

Стандартний діють правила. Виграє найкоротше подання в байтах.


4
Чи це те саме, що "знайти кількість виразів nзіставлених парних дужок, які містять саме kекземпляри ()"?
xnor


@xnor так, це так.
Джонатан Аллан

4
Ви можете оновити виклик більш чітким заголовком, таким як Compute Narayana Numbers .
Арнольд

Чи можете ви підтвердити, чи kпотрібно обробляти вхід з нулем? Якщо так, чи слід обробляти вхід, nрівний нулю ( kтакож за нульовим визначенням)?
Джонатан Аллан

Відповіді:



6

Желе , 7 байт

cⱮṫ-P÷⁸

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

Приймає введення як nтоді k. Використовує формулу

N(н,к)=1н(нк)(нк-1)

яку я знайшов у Вікіпедії .

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Ɱ×ƝṪ÷⁸
  • Дякую Джонатану Аллану за це.

Зачекайте ... хвіст автоматично визначається як 2 числа? (Джелі взагалі не знаю, лише дурне запитання)
Квінтек

@Quintec Є дві функції хвоста. Один ( ), який бере лише останній елемент одного аргументу, і той, який я використав ( ), який бере два аргументи. Аргумент кулака - це список, а другий - це число (у моєму випадку -1представлене -кодом у коді), який вказує, скільки елементів потрібно зберегти. Маючи -1ДАЙ два елементи був golfiest спосіб визначити
dylnan

Потрапив, спасибі! Я бачу, як будували желе для гольфу ... hehe
Квінтек

1
Ще один варіант для 7 f (n, k):cⱮ×ƝṪ÷⁸
Джонатан Аллан

4

JavaScript (ES6), 33 30 байт

Збережено 3 байти завдяки @Shaggy

Вводиться як " (n)(k).

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

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

Реалізує рекурсивне визначення, яке використовує Андерс Касеорг .


JavaScript (ES7), 59 58 49 45 байт

Вводиться як " (n)(k).

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

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

Обчислення:

ан,к=1к(н-1к-1)(нк-1)=1н(нк)(нк-1)=1н(нк)2×кн-к+1

Похідне від A001263 (перша формула).


-3 байти із завивкою.
Кудлатий

@Shaggy Doh ... Дякую. Редакція №7 нарешті виглядає так, як повинна бути переглянута №1. : p
Арнольд

3

Мова Вольфрама (Mathematica) , 27 байт

Три версії, однакової довжини:

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

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

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

Спробуйте в Інтернеті! (Просто перша версія, але ви можете скопіювати та вставити, щоб спробувати інші.)

Все це - якийсь варіант на

н!(н-1)!к!(к-1)!(н-к)!(н-к-1)!
яка формула, яка рухається. Я сподівався десь потрапити з функцією Beta, яка є своєрідною двочленною зворотною реакцією, але тоді відбулося занадто багато поділу.


2

J , 17 11 байт

]%~!*<:@[!]

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

Приймає nяк правильний аргумент, kяк лівий. Використовується та ж формула, як відповідь Jelly від ділнана та рішення APL Quintec.

Пояснення:

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

2

APL (Dyalog), 19 18 16 12 байт

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

Дякую @Galen Ivanov за -4 байти

Використовує ідентичність у послідовності OEIS. Бере k ліворуч і n праворуч.

ТІО


⊢÷⍨!×⊢!⍨¯1+⊣на 12 байт , аргумент зворотний
Гален Іванов

@GalenIvanov Дякую, моя мовчазна APL надзвичайно слабка
Quintec

Мій APL як не гарний, я просто скористався можливістю спробувати це після свого рішення J :)
Гален Іванов



1

Perl 6 , 33 байти

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

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

Використовує формулу

ан,к=(н-1к-1)×1к(нк-1)=i=1к-1(н-кi+1)×i=2к(н-кi+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+[-] @_)/[/] @_}

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

Використовує формулу з відповіді Арнальда:

ан,к=1н(нк)2×кн-к+1



0

Стакс , 9 байт

ÇäO╪∙╜5‼O

Запустіть і налагоджуйте його

Я використовую формулу dylnan у stax.

Розпакована, нерозроблена та коментована програма виглядає приблизно так.

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