Mostrando las entradas con la etiqueta combinaciones y permutaciones. Mostrar todas las entradas
Mostrando las entradas con la etiqueta combinaciones y permutaciones. Mostrar todas las entradas

lunes, febrero 22, 2016

Generar con Excel una lista de todas la permutaciones posibles

Cómo generar una lista con todas las permutaciones posibles usando Excel es una de las consultas recurrentes que recibo.
En este post publico una rutina de Vb (macro) que permite hacerlo, pero me apresuro a aclarar que el código no es de mi autoría. El código fue publicado por John Walkenbach en esta página y él a su vez aclara que no conoce el autor del algoritmo.

Entrando más en tema, todas la permutaciones posibles de un grupo de un conjunto de elementos (números o letras) está dado por el factorial de ese número. Por ejemplo, a partir del número 123 se pueden crear seis combinaciones(=FACT(3)=6):


  • 123
  • 132
  • 213
  • 231
  • 312
  • 321
El número de permutaciones crece violentamente con el número de elementos, como puede verse en esta tabla (calculada con la función FACT):

Por este motivo el código permite calcular las permutaciones de hasta 8 elementos.
Los resultados aparecen siempre a partir de la celda A1 de la hoja activa.

Para obtener las permutaciones activamos la rutina GetString, que comprueba si el texto ingresado tiene más de 1 caracter o menos de 9, y luego llama a la rutina GetPermutation.

Option Explicit

Dim CurrentRow

Sub GetString()
    Dim InString As String

    InString = InputBox("Ingrese el numero o texto")
    If Len(InString) < 2 Then Exit Sub
    If Len(InString) >= 8 Then
        MsgBox "Demasiadas permutaciones"
        Exit Sub
    Else
        ActiveSheet.Columns(1).Clear
        CurrentRow = 1
        Call GetPermutation("", InString)
    End If
End Sub

Sub GetPermutation(x As String, y As String)
'   Algoritmo de autor desconocido

    Dim i As Integer, j As Integer
    j = Len(y)
    If j < 2 Then
        Cells(CurrentRow, 1) = x & y
        CurrentRow = CurrentRow + 1
    Else
        For i = 1 To j
            Call GetPermutation(x + Mid(y, i, 1), _
            Left(y, i - 1) + Right(y, j - i))
        Next
    End If
End Sub


miércoles, julio 08, 2015

No, Excel no puede ayudarte a ganar la lotería

A lo largo de la vida de este blog he recibido no pocas consultas relacionadas con todo tipo de cálculos para acertar los números de la lotería. Digamoslo claramente: no, no se puede predecir el resultado de los sorteos de la lotería.
No sólo no se pueden predecir los resultados, sino que también las posibilidades ganar el primer premio son prácticamente inexistentes. Supongamos, por ejemplo, una loteria donde hay que acertar 6 de un conjunto de 49 números. Para calcular la probabilildad de acertar la cambinación ganadora, si n es el conjunto de 49 números que participan en el sorteo y k es cada una de las combinaciones posibles de 6 números, sin repeticiones, la expresión
n!
-----------------
k! * (n-k)!
donde el símbolo ! indica la operación factorial. Excel nos permite realizar el cálculo con facilidad usando la función COMBINAT(). La expresión =1/COMBINAT(n,k) nos da la probabilidad de que una combinación dada de seis números salga en el sorteo



Como puede apreciarse hay casi 14 millones de combinaciones posibles, es decir una probabilidad de 0.00000007 que nuestros números formen la combinación ganadora.

Sin embargo cada tanto alguién gana y se convierte enn un nuevo millonario. Por lo que seguiremos jugando y soñando qué hacer cuando la diosa fortuna golpee a nuestra puerta.
Y si bien Excel no nos puede ayudar a ganar la lotería, si puede ayudarnos a controlar si hemos obtenido algún premio.
Supongamos que nuestra lotería premia combinaciones de por lo menos 3 números ganadores. Supongamos también que siempre apostamos a la misma combinación y supongamos también que hemos jugado esta combinación durante diez sorteos y ahora queremos comprobar si hemos tenido suerte. Para hacerlo usaremos Formato Condicional y también SUMAPRODUCTO. La hoja Excel que aparece aquí abajo es interactiva y hay que desplazar la hoja hacia la derecha para ver las columnas K y L (también puede descargarse el archivo usando el icono en el ángulo inferior derecho).



Para señalar con un color de fondo los números sorteados que coinciden con "Mis_números" usamos format condicional con la opción Fórmula


Usamos ESNUMERO combinada con COINCIDIR para obtener resultado VERDADERO si el número evaluado coincide con alguno de los números del rango "Mis_numeros" lo hace que se aplique el formato.

En la columna L contamos la cantidad de aciertos logrados en cada sorteo con la fórmula

=SUMAPRODUCTO(--(E3:J3=Mis_numeros))



Usamos el doble guión para que Excel evalue los valores VERDADERO como 1 y los FALSO como 0.
La regla del formato condicional en la columna L es