Combinations and permutations: Difference between revisions

Added Crystal translation of Ruby version
(Add Swift)
(Added Crystal translation of Ruby version)
Line 364:
</lang>
 
=={{header|Crystal}}==
{{trans|Ruby}}
<lang crystal>require "big"
include Math
struct Int
def permutation(k)
(self-k+1..self).product(1.to_big_i)
end
def combination(k)
self.permutation(k) / (1..k).product(1.to_big_i)
end
def big_permutation(k)
exp(lgamma_plus(self) - lgamma_plus(self-k))
end
def big_combination(k)
exp( lgamma_plus(self) - lgamma_plus(self - k) - lgamma_plus(k))
end
private def lgamma_plus(n)
lgamma(n+1) #lgamma is the natural log of gamma
end
end
 
p 12.permutation(9) #=> 79833600
p 12.big_permutation(9) #=> 79833600.00000021
p 60.combination(53) #=> 386206920
p 145.big_permutation(133) #=> 1.6801459655817956e+243
p 900.big_combination(450) #=> 2.247471882064647e+269
p 1000.big_combination(969) #=> 7.602322407770517e+58
p 15000.big_permutation(73) #=> 6.004137561717704e+304
#That's about the maximum of Float:
p 15000.big_permutation(74) #=> Infinity
#Fixnum has no maximum:
p 15000.permutation(74) #=> 896237613852967826239917238565433149353074416025197784301593335243699358040738127950872384197159884905490054194835376498534786047382445592358843238688903318467070575184552953997615178973027752714539513893159815472948987921587671399790410958903188816684444202526779550201576117111844818124800000000000000000000
 
</lang>
{{out}}
<pre>
79833600
79833600.00000021
386206920
1.6801459655817956e+243
2.247471882064647e+269
7.602322407770517e+58
6.004137561717704e+304
Infinity
896237613852967826239917238565433149353074416025197784301593335243699358040738127950872384197159884905490054194835376498534786047382445592358843238688903318467070575184552953997615178973027752714539513893159815472948987921587671399790410958903188816684444202526779550201576117111844818124800000000000000000000
</pre>
=={{header|D}}==
{{trans|Ruby}}
Anonymous user