Números catalanes

36

Los números catalanes ( OEIS ) son una secuencia de números naturales que a menudo aparecen en combinatoria.

El enésimo número catalán es el número de palabras Dyck (cadenas equilibradas de paréntesis o paréntesis como [[][]]; formalmente definido como una cadena que usa dos caracteres ayb de modo que cualquier subcadena que comience desde el principio tenga un número de caracteres mayor o igual a número de caracteres b, y toda la cadena tiene el mismo número de caracteres ayb) con longitud 2n. El enésimo número catalán (para n> = 0) también se define explícitamente como:

A partir de n = 0, los primeros 20 números catalanes son:

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

Reto

Escriba un programa o función completa que tome un número entero no negativo n a través de STDIN o una alternativa aceptable, y genere el enésimo número catalán. Su programa debe funcionar como mínimo para las entradas 0-19.

I / O

Entrada

Su programa debe recibir información de STDIN, argumentos de función o cualquiera de las alternativas aceptables según esta meta publicación. Puede leer el número ingresado como su representación decimal estándar, representación unaria o bytes.

  • Si (y solo si) su idioma no puede recibir información de STDIN o alguna alternativa aceptable, puede recibir información de una variable codificada o equivalente adecuado en el programa.

Salida

Su programa debe generar el enésimo número catalán a STDOUT, resultado de la función o cualquiera de las alternativas aceptables según esta meta publicación. Puede generar el número catalán en su representación decimal estándar, representación unaria o bytes.

El resultado debe consistir en el número catalán apropiado, seguido opcionalmente por una o más líneas nuevas. No se puede generar otra salida, excepto la salida constante del intérprete de su idioma que no se puede suprimir (como un saludo, códigos de color ANSI o sangría).


No se trata de encontrar el idioma más corto. Se trata de encontrar el programa más corto en todos los idiomas. Por lo tanto, no aceptaré una respuesta.

En este desafío, los idiomas más nuevos que el desafío son aceptables siempre que tengan una implementación. Se permite (e incluso se recomienda) escribir este intérprete usted mismo para un idioma previamente no implementado. Aparte de eso, todas las reglas estándar del deben ser obedecidas. Las presentaciones en la mayoría de los idiomas se puntuarán en bytes en una codificación preexistente apropiada (generalmente UTF-8). Tenga en cuenta también que están permitidos los elementos integrados para calcular el enésimo número catalán.

Catalogar

El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

## Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

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

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

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

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:

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

un espagueti
fuente
¿Podemos imprimir / devolver un flotante en lugar de un entero?
Alex A.
@AlexA. Esto es aceptable
un spaghetto el
¿Habrá una etiqueta oeis ?
Vi.
1
@Vi. Hubo una meta discusión sobre eso hace un tiempo y acordamos que oeis era innecesario
un espagueti el
@Vi. Aquí está la meta publicación: meta.codegolf.stackexchange.com/a/5546/8478 . En cuanto a algún razonamiento, puede encontrar desafíos de estilo OEIS de manera bastante confiable con secuencia y uno de números o teoría de números . Si la secuencia dada está realmente en OEIS, es completamente irrelevante para el desafío.
Martin Ender

Respuestas:

26

C, 78 52 39 34 33 bytes

Aún más magia C (gracias xsot):

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

?: es una extensión de GNU .


Esta vez expandiendo la recurrencia a continuación (gracias xnor y Thomas Kwa):

otra recursión

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

-(n+1)se reemplaza por ~n, que es equivalente en el complemento a dos y ahorra 4 bytes.


De nuevo como una función, pero esta vez explotando la siguiente recurrencia:

repetirse

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

c(n)entra en una recursión infinita para negativo n, aunque no es relevante para este desafío.


Dado que llamar a una función parece una alternativa aceptable a la consola de E / S:

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

c(n)toma un inty devuelve un int.


Entrada original:

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

En lugar de calcular directamente la definición, la fórmula se reescribe como:

volver a escribir

La fórmula supone n >= 2, pero representa el código n = 0y n = 1también.

En el lío C anterior, ny ktienen el mismo papel que en la fórmula, mientras cacumula el producto. Todos los cálculos se realizan en coma flotante double, lo cual es casi siempre una mala idea, pero en este caso los resultados son correctos hasta al menos n = 19, por lo que está bien.

float habría guardado 1 byte, desafortunadamente no es lo suficientemente preciso.

Stefano Sanfilippo
fuente
No puedo probar esto ahora, pero creo que puedes acortarlo aún más:c(n){return!n?:(4+6./~n)*c(n-1);}
xsot
¡Gracias @xsot, no lo sabía ?:! Aparentemente, es una extensión GNU C pero creo que aún califica.
Stefano Sanfilippo
23

Jalea , 4 bytes

Ḥc÷‘

Pruébalo en línea!

Cómo funciona

Ḥc÷‘    Left argument: z

Ḥ       Compute 2z.
 c      Hook; apply combinations to 2z and z.
  ÷‘    Divide the result by z+1.
Dennis
fuente
1
¿Qué significa "gancho' media ¿Cómo funciona? cConseguir 2zy zcomo sus argumentos?
XNOR
@xnor Un gancho significa funciones evaluadas como f (x, g (x)). Cuando hay una función diádica seguida de otra función diádica, el analizador evalúa la primera como un gancho.
lirtosiast
55
@ Dennis ¿Son realmente 4 bytes? Con esos caracteres no ASCII, mothereff.in/byte-counter dice 9 bytes
Luis Mendo
@LuisMendo es probablemente una codificación diferente
undergroundmonorail
3
@LuisMendo Jelly usa su propia codificación personalizada, donde cada carácter es un solo byte. Con UTF-8, el código fuente tiene una longitud de 9 bytes.
Dennis
11

CJam, 12 bytes

ri_2,*e!,\)/

Pruébalo en línea.

Más allá de la entrada 11, deberá indicarle a su máquina virtual Java que use más memoria. Y en realidad no recomendaría ir mucho más allá de 11. Sin embargo, en teoría, funciona para cualquier N, ya que CJam usa enteros de precisión arbitraria.

Explicación

CJam no tiene incorporados coeficientes binomiales, y calcularlos a partir de tres factoriales requiere muchos bytes ... así que tendremos que hacer algo mejor que eso. :)

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.
Martin Ender
fuente
Esto es realmente genial. +1
un spaghetto
Esto es inteligente Lo intenté calculando los factoriales. Solo se necesitan dos de los tres habituales, ya que dos de ellos son iguales. Todavía usó 17 bytes ( ri_2*m!1$m!_*/\)/) en mi implementación. Lo único bueno es que es mucho más rápido. :)
Reto Koradi
11

Mathematica, 16 13 bytes

CatalanNumber

Muebles empotrados, amirite: /

Versión no incorporada (21 bytes):

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

Una versión sin binomio (25 bytes):

Product[(#+k)/k,{k,2,#}]&
un espagueti
fuente
10

TI-BASIC, 11 bytes

(2Ans) nCr Ans/(Ans+1

Curiosamente, nCr tiene mayor prioridad que la multiplicación.

lirtosiast
fuente
10

Python 3, 33 bytes

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

Utiliza la recurrencia

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

El caso base de 0 se maneja como 0**n or, que se detiene como 1cuando n==0y de lo contrario evalúa la expresión recursiva a la derecha. El operador bit a bit ~n==-n-1acorta el denominador y ahorra en parens.

Python 3 se usa para su división de flotación. Python 2 podría hacer lo mismo con un byte más para escribir 6..

xnor
fuente
¿Por qué no n<1más que 0**n?
feersum
@feersum Regresa Trueporn==0 más que por 1. Por supuesto, True == 1pero True is not 1y se imprime de manera diferente. Esperaría que esto no esté permitido. ¿Sabes si tenemos una decisión sobre esto?
xnor
Yo creo que está bien. isinstance(True, int) is Truedespués de todo.
fiesta del
2
Creo que todavía es dudoso en el caso general y más aquí donde el desafío especifica la salida como un número o su representación. Pero, hasta @quartata
xnor
7

J, 8 bytes

>:%~]!+:

Este es un tren monádico; utiliza la fórmula (2x nCr x) / (x + 1). Probarlo aquí .

lirtosiast
fuente
7

pl, 4 bytes

☼ç▲÷

Pruébalo en línea.

Explicación

En pl, las funciones eliminan sus argumentos de la pila y vuelven a colocar el resultado en la pila. Normalmente, cuando no hay suficientes argumentos en la pila, la función simplemente falla en silencio. Sin embargo, sucede algo especial cuando la cantidad de argumentos en la pila es uno fuera de la aridad de la función: la variable de entrada _se agrega a la lista de argumentos:

☼ç▲÷

☼      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

En efecto, este es el pseudocódigo:

divide(combinations(double(_),_),_+1);
un espagueti
fuente
6

Sesos , 94 86 68 bytes

8 bytes cambiando el factorial-er de la versión 1 a la versión 2.

18 bytes calculando n!(n+1)!en un solo paso. En gran parte inspirado por el algoritmo de prueba de primalidad de Dennis .

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

Pruébalo en línea!

Utiliza la fórmula a(n) = (2n)! / (n!(n+1)!).

  • El factorial-er: versión 1 (en el lugar, memoria constante), versión 2 (en el lugar, memoria lineal)
  • El multiplicador: aquí (en su lugar, memoria constante)
  • El divisor: aquí (no se detiene si no es divisible)

Ensamblador

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 equivalente

Este script de Retina se usa para generar el equivalente de brainfuck. Tenga en cuenta que solo acepta un dígito como argumento de comando y no verifica si hay un comando en los comentarios.

[->+>>++<<<]>+
[[-<+<+<+>>>]<-<-<[->>>+<<<]>]>>>
[[-<[-<+<+>>]<<[->>+<<]>>>]<[-]<[->>+<<]>>>]>
[[->+>+<<]>->[-<<+>>]<]<<
[[->[->+>+<<]>>[-<<+>>]<<<]>[-]>[-<<+>>]<<<]>
[>+<<<[->+>-<<]>[-<+>]>]>
Monja permeable
fuente
5

Pyth, 8

/.cyQQhQ

Pruébelo en línea o ejecute Test Suite

Explicación

/.cyQQhQ   ## implicit: Q = eval(input())
/     hQ   ## integer division by (Q + 1)
 .c        ## nCr
   yQ      ## use Q * 2 as n
     Q     ## use Q as r
FryAmTheEggman
fuente
5

En serio, 9 bytes

,;;u)τ╣E\

Hex Dump:

2c3b3b7529e7b9455c

Pruébalo en línea

Explicación:

,                   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.
quintapia
fuente
Puede guardar un byte explotando el hecho de que las filas del triángulo de Pascal son simétricas, por lo que la mediana de la 2nfila th es C(2n,n). Por lo tanto: ,;u@τ╣║/para 8 bytes.
Mego
¿Qué? ¿No es 2nCn el máximo de la 2ª fila?
quintopia
Sí, y también es la mediana. Por lo tanto, tanto y Mfuncionaría.
Mego
@Mego Me preocupa su implementación de la mediana si algo puede ser tanto la mediana como la máxima en el caso de que la lista no sea el mismo número. Si quiere decir "en el medio de la lista", entonces puede elegir un nombre diferente para ella ...
quintopia
Sí, es el medio de la lista. Para listas ordenadas, es la mediana estadística típica, pero para listas no ordenadas es solo el medio (o promedio de 2 elementos medios)
Mego
4

JavaScript (ES6), 24 bytes

Basado en la respuesta de Python .

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

Cómo funciona

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.

Creo que esto es lo más corto que puede ser, pero las sugerencias son bienvenidas.

ETHproducciones
fuente
4

Julia, 23 bytes

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

Esta es una función anónima que acepta un entero y devuelve un flotante. Utiliza la fórmula binomial básica. Para llamarlo, dale un nombre, por ejemplo f=n->....

Alex A.
fuente
4

Matlab, 35 25 bytes

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

Octava, 23 bytes

@(n)nchoosek(2*n,n++)/n
costrom
fuente
2
Puede usar en @(n)lugar de la función, las funciones anónimas están bien.
FryAmTheEggman
He visto varias respuestas aquí antes que tenían acceso a variables del espacio de trabajo (lo que implica que ya habían sido establecidas por el usuario en otro lugar). Las secuencias de comandos en MATLAB / Octave también pueden aparecer como fragmentos simples. Lo he vuelto a convertir en una función por ahora ...
costrom
1
Puede eliminar 2 bytes más mediante el incremento posterior n:@(n)nchoosek(2*n,n++)/n
vaso de precipitados
@beaker gracias por el consejo! Sin embargo, solo funciona en Octave, no en Matlab, así que lo he dividido
Costrom
@costrom Eso es interesante. Supongo .../++nque tampoco funciona. : /
vaso
4

𝔼𝕊𝕄𝕚𝕟, 3 caracteres / 6 bytes

Мƅï

Try it here (Firefox only).

Construido ftw! Me alegro de haber implementado math.js desde el principio.

Solución extra, 12 caracteres / 19 bytes

Мơ 2*ï,ï)/⧺ï

Try it here (Firefox only).

¡Sí! ¡19 byte!

Evalúa a pseudo-ES6 como:

nchoosek(2*input,input)/(input+1)
Mama Fun Roll
fuente
3

Haskell, 27 bytes

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

Una fórmula recursiva. Tiene que haber una manera de ahorrar en los padres ...

Tomar directamente el producto fue 2 bytes más largo:

g n=product[4-6/i|i<-[2..n+1]]
xnor
fuente
¿Dónde lee su código de stdin o escribe en stdout?
usuario2845840
2
@ user2845840 Las funciones son una de las alternativas aceptables vinculadas en la especificación.
xnor
g(n-1)=> g$n-1guarda un byte. Editar: en realidad esto no funciona porque entonces la fórmula se interpreta como (...*g) (n-1).
Vuelva a instalar Monica
3

Dyalog APL, 9 bytes

+∘1÷⍨⊢!+⍨

Este es un tren monádico; utiliza la fórmula (2x nCr x) / (x + 1). Pruébelo en línea aquí .

lirtosiast
fuente
3

C, 122 121 119 108 bytes

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

Usé gcc (GCC) 3.4.4 (cygming special, gdc 0.12, usando dmd 0.125) para compilar en un entorno Windows cygwin. La entrada entra en la línea de comando. Es similar a la solución Python de Sherlock9, pero los bucles se combinan en uno para evitar el desbordamiento y obtener una salida hasta el vigésimo número catalán (n = 19).

cleblanc
fuente
1
Puede eliminar el espacio después de la coma en la maindefinición para guardar un byte.
Alex A.
Bien
Puede guardar 2 bytes más en char**vlugar de char *v[]. (El espacio anterior *no es necesario, y los tipos son equivalentes.)
Mat
Efectivamente, eso funciona muy bien. Gracias Mat
cleblanc
Esto usa algunas cosas de la página de consejos para acortarlo. Sin embargo, tenga en cuenta que para Ideone codifiqué un valor para n.
FryAmTheEggman
3

Javagony , 223 bytes

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

Completamente expandido:

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);
    }
}
falla
fuente
La entrada de Esolangs no importa: siempre que use un intérprete hecho antes del concurso, todo es bueno y válido.
Addison Crump
No voy a ganar de todos modos ^^
flawr
Es Java, así que sí.
Rɪᴋᴇʀ
1
@Riker Bueno, es peor que Java.
Jakob
2

Japt, 16 bytes

Incluso Mathematica es más corto. :-/

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

Pruébalo en línea!

Sin golfos y explicación

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

Versión alternativa, basada en la fórmula recursiva:

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

Vitsy , 13 bytes

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.

Esta es una función en Vitsy . ¿Cómo convertirlo en un programa que haga esto? ConcatenarN . do:

Pruébalo en línea!

Addison Crump
fuente
2

Vía Láctea 1.5.14 , 14 bytes

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

Explicación

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

o, alternativamente, la versión mucho más eficiente:


Vía Láctea 1.5.14 , 22 bytes

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

Explicación

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

Uso

python3 milkyway.py <path-to-code> -i <input-integer>
Puertas de Zach
fuente
2

Clojure / ClojureScript, 53 bytes

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

Clojure puede ser bastante frustrante para jugar al golf. Es muy concienzudo aunque sigue siendo muy legible, pero algunas de las características más antiguas son realmente detalladas. (inc x)es más idiomático que (+ x 1)y "se siente" más conciso, pero en realidad no guarda caracteres. Y escribir cadenas de operaciones es mejor (->> x inc (/ 6) (- 4)), pero en realidad es más largo que hacerlo de la manera más fea.

MattPutnam
fuente
2

Prólogo, 42 bytes

Usar la recursión es casi siempre el camino a seguir con Prolog.

Código:

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

Ejemplo:

19*X.
X = 1767263190.0

Pruébalo en línea aquí

Emigna
fuente
¿Estás redefiniendo el *símbolo aquí?
Paŭlo Ebermann
@ PaŭloEbermann no exactamente. Estoy definiendo un nuevo predicado diádico llamado *. Todavía puedo usar la aritmética regular. En el programa anterior, M * Y es mi predicado definido, mientras que (4-6 / (N + 1)) * Y es una multiplicación regular.
Emigna
Es un poco más corto que escribirlo como p (X, Y): lo cual es bueno para el golf de código.
Emigna
2

Octava, 22 bytes

@(n)prod(4-6./(2:n+1))
alephalpha
fuente
2

Ceilán, 60 bytes

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

Esto funciona hasta C 30 , ya que los enteros de Ceylon son números con signo de 64 bits (C 31 tiene desbordamiento, se calculará como -4050872099593203).

No sé si Ceilán tiene alguna función matemática superior incorporada, pero luego importar el paquete correcto probablemente sea más largo que calcularlo a pie.

// 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);
Paŭlo Ebermann
fuente
2

R, 35 28 16 bytes

numbers::catalan

Editar: Use el paquete de números incorporado.

mnel
fuente
2

MATL , 8 bytes

2*GXnGQ/

Pruébalo en línea!

Explicación

2*     % take number n as input and multiply by 2
G      % push input again
Xn     % compute "2*n choose n"
G      % push input again
Q      % add 1
/      % divide
Luis Mendo
fuente
2

05AB1E , 6 bytes

Dxcr>/

Explicación:

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
Adnan
fuente
2

R, 28 bytes

No usa un paquete, por lo que es un poco más largo que una respuesta anterior

choose(2*(n=scan()),n)/(n+1)
Frédéric
fuente