package builtin.math;
import builtin.BuiltinSub;
import gui.Heap;
import gui.MintException;
import gui.Pointer;
import gui.PointerTools;
import gui.SmartList;
/**
*
* @author Oliver Chu
*/
public class BinomialChoose extends BuiltinSub {
@Override
public Pointer apply(SmartList<Pointer> args) throws MintException {
Pointer arg0 = args.get(0);
Pointer arg1 = args.get(1);
int n = PointerTools.dereferenceInt(arg0);
int k = PointerTools.dereferenceInt(arg1);
Factorial fact = new Factorial();
int answer = (int) ((double) fact.factorial(n) /
((double)fact.factorial(k) * (double) fact.factorial(n - k)));
return Heap.allocateInt(answer);
}
}