RosettaCodeData/Task/Combinations-and-permutations/Jq/combinations-and-permutations.jq
2017-09-25 22:28:19 +02:00

20 lines
547 B
Text

def permutation(k): . as $n
| reduce range($n-k+1; 1+$n) as $i (1; . * $i);
def combination(k): . as $n
| if k > ($n/2) then combination($n-k)
else reduce range(0; k) as $i (1; (. * ($n - $i)) / ($i + 1))
end;
# natural log of n!
def log_factorial: (1+.) | tgamma | log;
def log_permutation(k):
(log_factorial - ((.-k) | log_factorial));
def log_combination(k):
(log_factorial - ((. - k)|log_factorial) - (k|log_factorial));
def big_permutation(k): log_permutation(k) | exp;
def big_combination(k): log_combination(k) | exp;