Combinatoria

 

Ruby:
#combinatorio (9,3) n,k
c = 9,3
c << c[0]-c[1]
#--> [9,3,6]
# 7*8*9/(1*2*3) en una linea
r = (c.sort[1]+1..c.max).inject{|a,b| a*b}/(1..c.min).inject{|c,d| c*d}
puts r

en una linea el combinatorio (9,6) =
(7..9).inject{|a,b| a*b}/(1..3).inject{|c,d| c*d}

explicacion:
c es una lista [9,3] despues agregamos (<<)la diferencia (9-3) y nos queda
c = [9,3,6] c.sort --> [3,6,9] ;
c.sort[1]+1 --> 7 ; nos queda (7..9)

inject: esta funcion usa dos variables |a,b| en a acumula el resultado y
con b va recorriendo una lista de numeros desde el segundo elemente hasta el ultimo.
--> (7*8)*9)

------------- ~ ---------------

Python

>>> a,b,i = 1,1,1
>>> for x in range(6+1,9+1):
...                    a = a*x
...                    b,i = b*i, i+1
...
>>> a/b
84

------------- ~ ---------------

No hay comentarios:

Publicar un comentario

los comentarios son publicados inmediatamente, sin moderacion. Por favor, sea responsable.