Diferentes combinaciones posibles


9

Problema

Dado un valor n, imagine un paisaje de montaña inscrito en una referencia (0, 0) a (2n, 0). No debe haber espacios blancos entre las pendientes y tampoco la montaña debe descender por debajo del eje x. El problema a resolver es: dado n (que define el tamaño del paisaje) y el número k de picos (k siempre menor o igual que n), ¿cuántas combinaciones de montañas son posibles con k picos?

Entrada

n quién representa el ancho del paisaje yk cuál es el número de picos.

Salida

Solo la cantidad de combinaciones posibles.

Ejemplo

Dado n = 3 yk = 2, la respuesta es 3 combinaciones.

Solo para dar un ejemplo visual, son los siguientes:

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

son las 3 combinaciones posibles usando 6 (3 * 2) posiciones y 2 picos.

Editar: - más ejemplos -

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

Condición ganadora

Aplican reglas estándar de . La presentación más corta en bytes gana.


44
¿Es esto lo mismo que "encontrar el número de expresiones de npares de paréntesis coincidentes que contienen kinstancias exactas de ()"?
xnor


@xnor sí lo es.
Jonathan Allan

44
Es posible que desee actualizar el desafío con un título más explícito como Compute Narayana Numbers .
Arnauld

¿Podría confirmar si se kdebe manejar una entrada con cero? Si es así, ¿se debe manejar una entrada con nigual a cero (con ktambién cero por definición)?
Jonathan Allan

Respuestas:


7

Python, 40 bytes

f=lambda n,k:k<2or~-n*n*f(n-1,k-1)/~-k/k

Pruébalo en línea!

Utiliza la recurrencia an,1=1 , an,k=n(n1)k(k1)an1,k1.


6

Jalea , 7 bytes

cⱮṫ-P÷⁸

Pruébalo en línea!

Toma entrada como nentonces k. Usa la fórmula

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

que encontré en 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 bytes

Cada línea funciona por sí sola.

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

Toma entrada como kentonces n.

7 bytes

cⱮ×ƝṪ÷⁸
  • Gracias a Jonathan Allan por este.

Espera ... ¿la cola se define automáticamente como 2 números? (No conozco a Jelly en absoluto, solo una pregunta tonta)
Quintec

@Quintec Hay dos funciones de cola. Uno ( ) que solo toma el último elemento de un argumento único y el que usé ( ) que toma dos argumentos. El primer argumento es una lista y el segundo es un número (en mi caso -1representado por un -en el código) que le indica cuántos elementos guardar. Tener -1dar dos elementos era la forma golfiest para definir
dylnan

Gotcha, gracias! Veo cómo se construyó la gelatina para el golf ... jeje
Quintec

1
Otra variante para 7 f (n, k):cⱮ×ƝṪ÷⁸
Jonathan Allan

4

JavaScript (ES6), 33 30 bytes

Guardado 3 bytes gracias a @Shaggy

Toma entrada como (n)(k).

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

Pruébalo en línea!

Implementa la definición recursiva utilizada por Anders Kaseorg .


JavaScript (ES7), 59 58 49 45 bytes

Toma entrada como (n)(k).

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

Pruébalo en línea!

Calcula:

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

Derivado de A001263 (primera fórmula).


-3 bytes con curry.
Shaggy

@Shaggy Doh ... Gracias. La revisión n. ° 7 finalmente parece ser la revisión n. ° 1. : p
Arnauld

3

Wolfram Language (Mathematica) , 27 bytes

Tres versiones, todas de la misma longitud:

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

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

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

Pruébalo en línea! (Solo la primera versión, pero puede copiar y pegar para probar las otras).

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


2

J , 17 11 bytes

]%~!*<:@[!]

Pruébalo en línea!

Toma ncomo argumento correcto, kcomo el izquierdo. Utiliza la misma fórmula que la respuesta Jelly de dylnan y la solución APL de Quintec.

Explicación:

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

2

APL (Dyalog), 19 18 16 12 bytes

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

Gracias a @Galen Ivanov por -4 bytes

Utiliza la identidad en la secuencia OEIS. Toma k a la izquierda yn a la derecha.

TIO


⊢÷⍨!×⊢!⍨¯1+⊣para 12 bytes , argumento invertido
Galen Ivanov

@GalenIvanov Gracias, mi APL tácito es extremadamente débil
Quintec

Mi APL no es buena, simplemente aproveché la oportunidad para intentarlo, después de mi solución J :)
Galen Ivanov



1

Perl 6 , 33 bytes

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

Pruébalo en línea!

Usa la fórmula

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

Explicación

{[*]                            }  # 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.

Versión alternativa, 39 bytes.

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

Pruébalo en línea!

Utiliza la fórmula de la respuesta de Arnauld:

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



0

Stax , 9 bytes

ÇäO╪∙╜5‼O

Ejecutar y depurarlo

Estoy usando la fórmula de dylnan en stax.

Desempaquetado, sin golf y comentado, el programa se ve así.

        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

Ejecute este


0

APL (NARS), 17 caracteres, 34 bytes

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

prueba:

  f←{⍺÷⍨(⍵!⍺)×⍺!⍨⍵-1}
  (2 f 1)(4 f 1)(4 f 3)(5 f 2)    
1 1 6 10 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.