# 数学组合

11

``````n,k
`````` ``````5,2
`````` ``````10
``````

``````n,k=input();f=lambda x:+(x<2)or x*f(x-1);print f(n)/(f(k)*f(n-k))
``````

Perl：35

PHP的：62

Ventero 2011年

@Ventero你是对的，我的意思是程序。对于那个很抱歉。
backus 2011年

3

@Jesse我是从另一个仅允许使用主要脚本语言的网站获得挑战的，我会在将来记住该指南。我编辑了我的问题，试图使挑战要求更加清晰，让我知道它是否足够清晰。
backus 2011年

Jesse Millikan

11

# APL，3个字节

``````⎕!⎕
``````

``````{Quad}!{Quad}
``````

3

marinus 2012年

10

# R（11个字符）

``````choose(n,r)
``````

10

## C 96

``````main(a,b,c,d){scanf("%d,%d",&a,&b);
d=a-b;for(c=1;a>b;){c*=a--;}for(;d;)
{c/=d--;}printf("%d",c);}
``````

``````    d;main(a
,         b
,           c
)  int        a
;   {scanf    (
(   "%d %d"   )
,   &a,  &b   )
;   d    =a   -
b   +     b   -
b   *     1   ;
a             -
a  ;for    (  c
=  1;a>   b   ;
)  {c=   c    *
(  (a-- )     )
;  }for(      b
=  b + 1      ;
d  ;    )     {
c  =     c    /
(  d--    )   ;
}           {
}           {
}         (
printf("%d",c)
)      ;       }
/*     *  *   * *\
* * X   * 8 * * |
|     *      *    \
*/    //       *  */
``````

7

## GolfScript，17个字符

``````~>.,,]{1\{)*}/}//
``````

6

# 高尔夫脚本21

``````~~)>.,,]{{)}%{*}*}%~/
``````

“ 5,2”来自输入的堆栈数据。
`~`Eval命令，请注意，是将数字转换为数组的运算符。
[0 1 2 3 4] 2
`~`二进制不。
[0 1 2 3 4] -3
`)`递增。
[0 1 2 3 4] -2
`>`以数组的结尾，-2作为参数来获取最后2个元素。
[3 4]
`.`重复的元素。
[3 4] [3 4]
`,`数组长度。
[3 4] 2
`,`将数字转到数组。
[3 4] [0 1]
`]`创建数组。
[[3 4] [0 1]]
`{{)}%{*}*}`代码块。
[[3 4] [0 1]] {{）}％{*} *}
`%`对数组的每个元素执行一次块。以下部分仅演示第一个循环。
[3 4]
`{)}%`递增每个数组元素。
[4 5]
`{*}`包含乘法命令的块。
[4 5] {*}
`*`使用block命令“折叠”数组，在这种情况下，将所有元素乘积。
20

[20 2]
`~`解构数组。
20 2
`/`师。
10

6

## Ruby 1.9， 52 46（42）个字符

``````eval"A,B="+gets;i=0;p eval"(A-B+i+=1)/i*"*B+?1
``````

``````eval"A,B=I="+gets;p eval"I/(A-I-=1)*"*B+?1
``````

Ruby 1.8，43个字符，没有附加输出到stderr：

``````eval"a,b=i="+gets;p eval"i/(a-i-=1)*"*b+"1"
``````

• （52-> 48）找到了一种解析输入的较短方法
• （48-> 46）更少的循环，更多的评估。

4

## 巨蟒（56）

``````f=lambda n,k:k<1and 1or f(n-1,k-1)*n/k;print f(*input())
``````

``````# Since choose(n,k) =
#
#     n!/((n-k)!k!)
#
#          [n(n-1)...(n-k+1)][(n-k)...(1)]
#        = -------------------------------
#            [(n-k)...(1)][k(k-1)...(1)]
#
# We can cancel the terms:
#
#     [(n-k)...(1)]
#
# as they appear both on top and bottom, leaving:
#
#    n (n-1)     (n-k+1)
#    - ----- ... -------
#    k (k-1)       (1)
#
# which we might write as:
#
#      choose(n,k) = 1,                      if k = 0
#                  = (n/k)*choose(n-1, k-1), otherwise
#
def choose(n,k):
if k < 1:
return 1
else:
return choose(n-1, k-1) * n/k

# input() evaluates the string it reads from stdin, so "5,2" becomes
# (5,2) with no further action required on our part.
#
# In the golfed version, we make use of the `*` unpacking operator,
# to unpack the tuple returned by input() directly into the arguments
# of f(), without the need for intermediate variables n, k at all.
#
n, k = input()

# This line is left as an exercise to the reader.
print choose(n, k)
``````

backus 2011年

Quixotic

4

## 角色扮演（4）

（使用内置功能）

``````COMB
``````

3

## Windows PowerShell，57

``````\$a,\$b=iex \$input
\$p=1
for(\$a-=\$b;\$a-ge1){\$p*=1+\$b/\$a--}\$p
``````

3

# J，33 36

``````(":!~/".;._1}:toJ',',1!:1(3))1!:2(4)
``````

3

# Q，32个字符

``````{f:{1*/1.+(!)x};f[x]%f[y]*f x-y}
``````

2

## Perl 6（55）

``````my (\$a,\$b)=lines;\$_=1;for 1..\$a-\$b {\$_+=\$_*\$b/\$^a};.say
``````

2

## 角色扮演（22）

（不使用内置的COMB功能）

``````→ n k 'n!/(k!*(n-k)!)'
``````

2

## 问（50 45）

`````` f:{(prd 1.+til x)%((prd 1.+til y)*prd 1.+til x-y)}
``````

``````f:{(1*/1.+til x)%(1*/1.+til y)*1*/1.+til x-y}
``````

2

# Mathematica 12

``````n~Binomial~k
``````

2

# Perl 6的，25 16个字节

-9字节归功于nwellnhof

``+*o&combinations``

@nwellnhof啊，我没有意识到`combinations`可以用数字代替列表
Jo King

1

## PHP（71 79）

``````<?\$a=fgetcsv(STDIN);\$x=1;while(\$a-\$i)\$x=\$x*(\$a-++\$i+1)/\$i;echo\$x;
``````

``````<?php \$a=fgetcsv(STDIN);\$x=1;while(++\$i<=\$a)\$x=\$x*(\$a-\$i+1)/\$i;echo \$x?>
``````

1

# 巨蟒（54）

``````f=lambda n,k:k<1or f(n-1,k-1)*n/k;print 1*f(*input())
``````

``````and 1
``````

1

## J，11个字符

``````!~/".1!:1[1
``````

``````    !~/".1!:1[1
5,2
10
``````

0

## 哈斯克尔（80）

``````f(_,0)=1
f(n,k)=n/k*f(n-1,k-1)
``````

``````f[_,0]=1
f[n,k]=n/k*f[n-1,k-1]
``````

0

### 斯卡拉54

``````val n,k=readInt
((k+1)to n product)/(1 to(n-k)product)
``````

0

# 巨蟒（52）

`````` f=lambda n,k:k<1or f(n-1,k-1)*n/k;print+f(*input())
``````

0

（OP仅宽松地指定了输入和输出方法/格式，因此以下内容似乎可以接受。）

## 鼠尾草笔记本（39 41 40）

``````f=lambda n,k:k<1or f(n-1,k-1)*n/k;+f(*_)
``````

`n,k`前面的单元格中输入并评估表格中的输入的位置。通过将其分配给`_`（类似于命令行参数）来模拟“命令行输入” 。

## 鼠尾草笔记本（42 44 43）

``````x=5,2
f=lambda n,k:k<1or f(n-1,k-1)*n/k;+f(*x)
``````

0

# Javascript，27个字节

``````f=(n,k)=>n-k&&k?f(--n,k)+f(n,k-1):1
``````

``````f=(n,k,i=k)=>i?f(n-1,k-1,i-1)*n/k:1
``````

``````f=(n,k)=>k?n*f(n-1,k-1)/k:1
``````

0

# TI-BASIC，16个字符（8个字节）

``````Ans(1) nCr Ans(2
``````

``````Ans(2)!⁻¹(Ans(1)-Ans(2))!⁻¹Ans(1)!
``````