UNPKG

1.05 kBtext/coffeescriptView Raw
1### choose =====================================================================
2
3Tags
4----
5scripting, JS, internal, treenode, general concept
6
7Parameters
8----------
9n,k
10
11General description
12-------------------
13
14Returns the number of combinations of n items taken k at a time.
15
16For example, the number of five card hands is choose(52,5)
17
18```
19 n!
20 choose(n,k) = -------------
21 k! (n - k)!
22```
23###
24
25
26Eval_choose = ->
27 push(cadr(p1))
28 Eval()
29 push(caddr(p1))
30 Eval()
31 choose()
32
33# Result vanishes for k < 0 or k > n. (A=B, p. 19)
34
35#define N p1
36#define K p2
37
38choose = ->
39 save()
40
41 p2 = pop()
42 p1 = pop()
43
44 if (choose_check_args() == 0)
45 push_integer(0)
46 restore()
47 return
48
49 push(p1)
50 factorial()
51
52 push(p2)
53 factorial()
54
55 divide()
56
57 push(p1)
58 push(p2)
59 subtract()
60 factorial()
61
62 divide()
63
64 restore()
65
66choose_check_args = ->
67 if (isnum(p1) && lessp(p1, zero))
68 return 0
69 else if (isnum(p2) && lessp(p2, zero))
70 return 0
71 else if (isnum(p1) && isnum(p2) && lessp(p1, p2))
72 return 0
73 else
74 return 1
75
76