Katalanca Sayılar


36

Katalanca numaraları ( OEIS ) çoğu zaman, kombinasyon görünen doğal bir sayı dizisi bulunmaktadır.

N. Katalanca sayı, Dyck kelimelerinin sayısıdır (dengeli parantez dizileri veya [[][]]a ve b iki karakterini kullanarak biçimsel olarak tanımlanmış bir dize gibi tanımlanmış parantez veya parantezler . b karakterlerinden oluşan dizgenin tümü, 2n uzunluğunda, aynı dizgede a ve b karakterleriyle aynı sayıdadır. Katalanca sayı (n> = 0 için) ayrıca açıkça şöyle tanımlanır:

N = 0'dan başlayarak ilk 20 Katalanca sayı:

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

Meydan okuma

STDIN aracılığıyla negatif olmayan bir tamsayı n veya kabul edilebilir bir alternatif alan ve nt Katalanca sayısını veren tam bir program veya işlev yazın. Programınız 0-19 girişleri için asgari olarak çalışmalıdır.

I / O

Giriş

Programınız STDIN'den, işlev argümanlarından veya bu meta gönderi için kabul edilebilir alternatiflerden herhangi birinden girdi almalıdır . Girilen sayıyı standart ondalık gösterimi, tekli gösterimi veya bayt olarak okuyabilirsiniz.

  • Diliniz STDIN'den veya kabul edilebilir herhangi bir alternatifden giriş alamazsa (ve yalnızca eğer), programdaki bir kodlanmış değişkenden veya uygun bir eşdeğerden giriş alabilir.

Çıktı

Programınız, bu Katalonya numarasını STDOUT'a, işlev sonucuna veya bu meta gönderi için kabul edilebilir alternatiflerden birine vermelidir . Katalanca sayıyı standart ondalık göstergede, tekli göstergede veya bayt olarak verebilirsiniz.

Çıktı isteğe bağlı olarak bir veya daha fazla yeni satır tarafından takip edilen uygun Katalanca numaradan oluşmalıdır. Dilinizin yorumlayıcısının bastırılamayan (tebrik, ANSI renk kodları veya girinti gibi) sabit çıktısı dışında başka bir çıktı üretilemez.


Bu en kısa dili bulmakla ilgili değil. Bu her dilde en kısa programı bulmakla ilgili. Bu nedenle bir cevap kabul etmeyeceğim.

Bu mücadelede, mücadeleden daha yeni diller , bir uygulamaya sahip oldukları sürece kabul edilebilirdir . Daha önce uygulanmamış bir dil için bu tercümanı kendiniz yazmanıza izin verilir (ve hatta teşvik edilir). Bunun dışında tüm standart kurallarına uyulmalıdır. Çoğu dilde yapılan gönderiler uygun bir önceden kodlanmış kodlamada (genellikle UTF-8) bayt olarak puanlanacaktır. Ayrıca, nt Katalanca sayısını hesaplamak için yerleşik yapılara izin verildiğini unutmayın.

Katalog

Bu yazının altındaki Yığın Parçacığı, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

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


Bir tamsayı yerine bir float yazdırabilir / geri gönderebilir miyiz?
Alex A.

@AlexA. Bu kabul edilebilir.
Bir spaghetto

Bir etiket oeis olacak mı?
Vi.

1
@Vi. Anlaştığımız bir arka ederken ve bu konuda bir meta tartışma vardı oeis gereksiz
Bir Spaghetto

@Vi. İşte meta yazı: meta.codegolf.stackexchange.com/a/5546/8478 . Bazı mantıklara gelince, OEIS tarzı zorlukları sekans ve sayı veya sayı teorisinden biriyle oldukça güvenilir bir şekilde bulabilirsiniz . Verilen dizi aslında İster olduğunu OEIS içinde, meydan tamamen alakasız.
Martin Ender

Yanıtlar:


26

C, 78 52 39 3433 bayt

Daha da fazla C büyüsü (teşekkürler xsot):

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

?: bir GNU uzantısıdır .


Bu kez aşağıdaki tekrarı arttırarak (teşekkürler xnor ve Thomas Kwa):

başka bir özyineleme

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

-(n+1)ile değiştirilir ~niki bilgisayarın tamamlayıcı eşdeğerdir ve 4 bayt kazandırır,.


Yine bir işlev olarak, ancak bu kez aşağıdaki yinelemeden yararlanarak:

yinelemek

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

c(n)nBu zorluk için uygun olmasa da, negatif için sonsuz bir özyineleme girer .


Bir işlevi çağırmak konsol G / Ç'ye kabul edilebilir bir alternatif gibi gözüktüğünden:

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

c(n)bir alır intve bir döndürür int.


Orjinal giriş:

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

Tanımı doğrudan hesaplamak yerine, formül şöyle yeniden yazılır:

yeniden yazmak

Formül varsayar n >= 2, ancak kod hesapları n = 0ve n = 1de.

C üzerinde karışıklık, içinde nve ksüre, formül aynı rol cürün birikir. Tüm hesaplamalar double, hemen hemen her zaman kötü bir fikir olan kayan nokta kullanılarak gerçekleştirilir , ancak bu durumda sonuçlar en azından n = 19'a kadar doğrudur, bu yüzden tamamdır.

float 1 bayt kurtarırdı, ne yazık ki yeterince kesin değil.


Bunu şimdi test edemiyorum ama bence daha da kısaltabilirsiniz:c(n){return!n?:(4+6./~n)*c(n-1);}
xsot

Thanks @xsot, bilmiyordum ?:! Görünüşe göre, bu bir GNU C uzantısı, ancak yine de uygun olduğunu düşünüyorum.
Stefano Sanfilippo

23

Jöle , 4 bayt

Ḥc÷‘

Çevrimiçi deneyin!

Nasıl çalışır

Ḥc÷‘    Left argument: z

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

1
Ne "does kanca' demek nasıl etkiliyor? cOlsun 2zve zbağımsız değişkenler olarak?
XNOR

@xnor Bir kanca, f (x, g (x)) gibi değerlendirilen fonksiyonları ifade eder. Bir başka dyadik fonksiyonun izlediği bir dyadik fonksiyon olduğunda, ayrıştırıcı bir tanesini kanca olarak değerlendirir.
lirtosiast

5
@Dennis Bu gerçekten 4 bayt mı? Bu ASCII olmayan karakterler ile mothereff.in/byte-counter 9 bayt diyor
Luis Mendo

@LuisMendo muhtemelen farklı bir kodlama
undergroundmonorail

3
@LuisMendo Jelly, her karakterin bir bayt olduğu kendi özel kodlama varsayılanını kullanır. UTF-8 ile kaynak kodun uzunluğu 9 bayttır.
Dennis,

11

CJam, 12 bayt

ri_2,*e!,\)/

Çevrimiçi deneyin.

Giriş 11'in ötesinde, Java VM'nize daha fazla bellek kullanması gerektiğini söylemeniz gerekir. Ve aslında 11'in ötesine geçmeyi tavsiye etmem. Teorik olarak, herhangi bir N için işe yarıyor, çünkü CJam isteğe bağlı tam sayılar kullanıyor.

açıklama

CJam, binom katsayıları için yerleşik bir kaynağa sahip değildir ve bunları üç faktörden hesaplamak çok fazla bayt alır ... bu yüzden bundan daha iyisini yapmak zorundayız. :)

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.

Bu gerçekten havalı. +1
bir

Bu akıllıca. Faktörlerin hesaplanması ile denedim. İkisi aynı olduğundan, ikisinin sadece ikisini alır. ri_2*m!1$m!_*/\)/Benim uygulamada hala 17 byte ( ) kullandı . Tek iyi şey, çok daha hızlı olması. :)
Reto Koradi

11

Mathematica, 16 13 bayt

CatalanNumber

Ankastre, amirit arkadaşlar: /

Yerleşik olmayan sürüm (21 bayt):

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

Binom'suz bir sürüm (25 bayt):

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

10

TI-BASIC, 11 bayt

(2Ans) nCr Ans/(Ans+1

Garip bir şekilde, nCr çarpımdan daha yüksek önceliğe sahiptir.


10

Python 3, 33 bayt

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

Yinelenme kullanır

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

0'ın temel durumu , sağdaki özyinelemeli ifadeyi ne zaman 0**n orolduğu gibi duran ve başka şekilde değerlendiren şekilde ele alınır . Bitsel operatör paydayı kısaltır ve parenslerde tasarruf sağlar.1n==0~n==-n-1

Python 3, şamandıra bölümü için kullanılır. Python 2, yazmak için bir bayt ile aynı şeyi yapabilirdi 6..


Neden n<1ziyade 0**n?
feersum

@feersum O döndürür Trueiçin n==0yerine 1. Tabii ki, True == 1ama True is not 1farklı basar. Buna izin verilmemesini beklerdim. Bu konuda bir kararımız var mı, biliyor musun?
XNOR

Bunun iyi olduğuna inanıyorum. isinstance(True, int) is Truehepsinden sonra.
feersum

2
Bence genel durum ve buradaki zorunluluğun çıktıyı bir sayı ya da temsili olarak belirttiği Moreso'da hala kabarcıklı. Ancak, @ quartata
xnor için

7

J, 8 bayt

>:%~]!+:

Bu monadik bir tren; (2x nCr x) / (x + 1) formülünü kullanır. Burada dene .


7

pl, 4 bayt

☼ç▲÷

Çevrimiçi deneyin.

açıklama

Pl işlevler argümanlarını yığından alır ve sonucu yığına geri iter. Normalde, yığında yeterli argüman olmadığında, işlev sessizce başarısız olur. Bununla birlikte, yığtaki argümanların miktarı, fonksiyonun aritesinden bir defa çıktığında özel bir şey olur - giriş değişkeni _argüman listesine eklenir:

☼ç▲÷

☼      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

Aslında, bu sahte koddur:

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

6

Sesos , 94 86 68 bayt

Faktör-er'i sürüm 1'den sürüm 2'ye değiştirerek 8 bayt.

n!(n+1)!Tek adımda hesaplayarak 18 bayt . Büyük ölçüde Dennis'in ilkellik test algoritmasından esinlenmiştir .

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

Çevrimiçi deneyin!

Formülü kullanır a(n) = (2n)! / (n!(n+1)!).

  • Faktör-er: sürüm 1 (yerinde, sabit bellek), sürüm 2 (yerinde, doğrusal bellek)
  • Çarpan: burada (yerinde, sabit bellek)
  • Bölücü: burada (bölünemezse durmaz)

montajcı

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 eşdeğeri

Bu Retina betiği , beyin sapı eşdeğeri oluşturmak için kullanılır. Yalnızca bir basamağı komut argümanı olarak kabul ettiğini ve yorumlarda bir komut olup olmadığını kontrol etmediğini unutmayın.

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


5

Cidden, 9 bayt

,;;u)τ╣E\

Hex Dump:

2c3b3b7529e7b9455c

Çevrimiçi deneyin

Açıklama:

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

Pascal üçgeninin satırlarının simetrik olduğu gerçeğinden yararlanarak bir bayttan tasarruf edebilirsiniz, bu yüzden 2nth sırasının medyanıdır C(2n,n). Böylece: ,;u@τ╣║/8 bayt için.
Mego

Ne? 2nCn 2nci sıranın en fazla değeri değil midir?
quintopia

Evet, ayrıca medyan. Yani, hem ve Mçalışmaya devam eder.
Mego

@Mego Listenin aynı sayıda olmaması durumunda bir şeyin hem medyan hem de max olması durumunda medyan uygulamanız için endişeleniyorum. "Listenin ortasında" demek istiyorsan, bunun için farklı bir isim seçebilirsin ...
quintopia

Evet, listenin ortası. Sıralı listeler için, tipik istatistiksel medyandır, ancak sıralanmamış listeler için sadece orta (veya 2 orta öğenin ortalaması)
Mego

4

JavaScript (ES6), 24 bayt

Python cevabına dayanarak .

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

Nasıl çalışır

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.

Bence en kısa sürede alabiliyorum, ancak önerileriniz memnuniyetle karşılanıyor!


4

Julia, 23 bayt

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

Bu bir tamsayı kabul eden ve bir şamandıra döndüren adsız bir işlevdir. Temel binom formülünü kullanır. Aramak için bir isim verin, örneğin f=n->....


4

Matlab, 35 25 bayt

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

Octave, 23 bayt

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

2
@(n)İşlev yerine kullanabilirsiniz , adsız işlevler tamamdır.
FryAmTheEggman

Daha önce burada, çalışma alanı değişkenlerine erişilmiş olan (daha önce başka bir kullanıcı tarafından ayarlanmış olduklarını ima eden) çeşitli yanıtlar gördüm. MATLAB / Octave'deki komut dosyaları da basit pasajlar olarak görünebilir. Şimdilik bir fonksiyon haline
getirdim

1
Sen son artırım ile 2 daha bayt hallediyor n:@(n)nchoosek(2*n,n++)/n
beher

@beaker bahşiş için teşekkürler! sadece, ama, değil Matlab Octave çalışır yüzden ayrı ettik bölünmüş o
costrom

@costrom Bu ilginç. Sanırım .../++nya da çalışmıyor. : /
kabı


3

Haskell, 27 bayt

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

Özyinelemeli bir formül. Ebeveynlerden tasarruf etmenin bir yolu olmalı ...

Ürünün doğrudan alınması 2 byte daha uzundu:

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

Kodunuz stdin'den nereden okuyor veya stdout'a yazıyor?
user2845840

2
@ user2845840 İşlevler , teknik özelliklerle bağlantılı kabul edilebilir alternatiflerden biridir .
XNOR

g(n-1)=> g$n-1bir bayt kaydeder. Düzenleme: aslında bu işe yaramaz çünkü o zaman formül olarak yorumlanır (...*g) (n-1).
Solomonoff'un Sırrı

3

Dyalog APL, 9 bayt

+∘1÷⍨⊢!+⍨

Bu monadik bir tren; (2x nCr x) / (x + 1) formülünü kullanır. Burada çevrimiçi deneyin .


3

C, 122 121 119 108 bayt

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 ortamında derlemek için gcc (GCC) 3.4.4 (cygming special, gdc 0.12, dmd 0.125 kullanarak) kullandım. Giriş komut satırında gelir. Sherlock9'un Python çözümüne benzer, ancak taşmaları önlemek ve 20. Katalanca numaraya (n = 19) kadar çıkış elde etmek için ilmekler birleştirilir.


1
mainBir bayttan tasarruf etmek için tanımdaki virgülten sonraki boşluğu kaldırabilirsiniz .
Alex A.

Güzel, şimdi
yazıyı

Bunun char**vyerine 2 bayttan daha fazlasını kaydedebilirsiniz char *v[]. (Önceden boşluk *gerekli değildir ve türleri eşdeğerdir.)
Mat

Tabii ki, bu harika çalışıyor. Thanks Mat
cleblanc

Bu kısaltmak için ipuçları sayfasından bazı şeyler kullanır . Yine de, Ideone için bunun için bir değer kodladığımı unutmayın n.
FryAmTheEggman

3

Javagony , 223 bayt

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

Tamamen genişletilmiş:

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'ın girişi önemli değil - yarışmadan önce bir tercüman kullandığınız sürece, hepsi iyi ve geçerli.
Addison Crump,

Yine de kazanamayacak ^^
kusur

Bu bir java, yani evet.
Rɪᴋᴇʀ

1
@Riker Peki, Java'dan daha kötü.
Jakob

2

Japt, 16 bayt

Mathematica bile daha kısa. :-/

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

Çevrimiçi deneyin!

Ungolfed ve açıklama

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

Özyinelemeli formüle göre alternatif versiyon:

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

2

Vitsy , 13 Bayt

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.

Bu Vitsy'de bir fonksiyondur . Bunu yapan bir program nasıl yapılır? Bitiştirmek N. c:

Çevrimiçi deneyin!


2

Samanyolu 1.5.14 , 14 bayt

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

açıklama

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

veya alternatif olarak, çok daha verimli versiyonu:


Samanyolu 1.5.14 , 22 bayt

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

açıklama

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

kullanım

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

2

Clojure / ClojureScript, 53 bayt

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

Clojure, golf oynamak için oldukça sinir bozucu olabilir. Hala çok okunaklı olsa da çok özümseyebilir, ancak bazı niftier özelliklerinden bazıları gerçekten ayrıntılıdır. (inc x)çok daha deyimsel (+ x 1)ve "daha özlü" hissettiriyor, ancak aslında karakterleri kaydetmiyor. İşlem zincirleri yazmak da daha güzel (->> x inc (/ 6) (- 4)), ama aslında sadece çirkin bir şekilde yapmaktan daha uzun.


2

Prolog, 42 bayt

Özyinelemeyi kullanmak neredeyse her zaman Prolog ile devam etmenin yoludur.

Kod:

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

Örnek:

19*X.
X = 1767263190.0

Burada çevrimiçi deneyin


*Buradaki sembolü yeniden tanımlıyor musunuz ?
Paŭlo Ebermann

@ PaŭloEbermann tam olarak değil. * Adlı yeni bir dyadic belirti tanımlıyorum. Hala normal aritmetik olanı kullanabilirim. Yukarıdaki programda, M * Y benim tanımlanmış yüklememdir (4-6 / (N + 1)) * Y düzenli çarpımdır.
Emigna

Kod golf için iyi bir p (X, Y): - yazmaktan biraz daha kısadır.
Emigna


2

Seylan, 60 bayt

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

Bu C'ye kadar çalışır 30 Seylan en tamsayı (C 64-bit numaraları imzalanmış olarak, 31 , -4050872099593203 olarak hesaplanacaktır taşma vardır).

Ceylon'un yerleşik daha yüksek bir matematiksel işlevi olup olmadığını bilmiyorum, ancak daha sonra doğru paketi almak, bunu yalnızca yürüyerek hesaplamaktan daha uzun sürecektir.

// 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 bayt

numbers::catalan

Düzenleme: yerleşik sayılar paketini kullanın.


2

MATL , 8 bayt

2*GXnGQ/

Çevrimiçi deneyin!

açıklama

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

2

05AB1E , 6 bayt

Dxcr>/

Açıklama:

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 bayt

Paket kullanmamak, önceki cevaplardan biraz daha uzun

choose(2*(n=scan()),n)/(n+1)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.