Regresar a la Pagina de Inicio

28/3/2011

combinaciones sencillas en excel

He dedicado una entrada bastante compleja, hace un tiempo atrás, sobre la forma de obtener combinaciones en base a distintos caracteres, para, por ejemplo, romper una contraseña. Y digo mal "combinación", ya que una contraseña o password o clave es, en realidad, una "permutación". ¿La diferencia? en una combinación el orden de los elementos no importa: es lo mismo mezclar tomates, cebollas y lechuga que cebollas, lechugas y tomates. Pero en una permutación no es igual "abc" que "bca". Aquí el orden sí posee importancia, y mucha. Si alguien tiene alguna duda, que la proxima vez ingrese los caracteres de su contraseña al webmail en el orden que le plazca, y verá como el ingreso será rechazado.

Un lector que no está ducho en la implementación de macros, y que a su vez posee unos pocos números a combinar, me solicita otra solución, mas sencilla. Le remiten 5 o 6 cheques por día, de distintos valores, junto a una o dos facturas de compra. El sabe que esa factura se pagó con algunos de los cheques, pero no sabe cuales. Manualmente (y con calculadora en mano) debe "mezclar" esos cheques hasta dar con los que forman el importe de la factura, que pueden ser dos, cuatro, seis, etc. La solución no es complicada (hay otra forma de solucionarlo con la herramienta "solver", pero es mas difícil) y viene de la mano de lo que autodenominé "tabla binaria". Realmente no se si se llama así, pero la bauticé de esa forma por que nunca me enteré de su verdadero nombre.
la tan "mentada" tabla binaria... o como se llame.
[+/-] Ver el resto / Ocultar

4 comentarios:

Anónimo dijo...

Hola buenas, yo tengo una duda. Necesito hace un Floyd de 6x6. Tengo 3 letras, K ; I ; J, y tengo que darle un valor de 1 a 6 sin que se repitan. Se que son 120 combinaciones pero me gustaría saber si se puede hacer automáticamente con excel o acces

Damian Omar Silva dijo...

la verdad que es la primera vez que veo el término "floyd". quizás lo conozca bajo otra denominación, pero por ahora no me doy cuenta.

te comento: pasame un archivo a la direccion de mail que figura debajo del formulario, así veo bien lo que necesitas y armo una entrada al respecto. con visual basic es muy sencillo generar aleatorios entre dos valores, sin repetir. quedo al aguardo de tus noticias.

Damian Omar Silva dijo...

estimado: aquí te dejo un pequeño código que genera 3 aleatorios (todos distintos entre si, entre 1 y 6) y los coloca dentro de un rango al que llamé "cuadro". es muy sencillo de modificar, por si el día de mañana necesitaras ampliar la cantidad de aleatorios o entre que valores deben moverse los resultados:

Sub TresAleatorios()
Dim Alea, Cont As Byte

Cont = 0
Randomize
Range("cuadro").ClearContents

'el bucle se ejecutará mientras el valor
'de Cont sea menor a 3. si necesitas generar
'mas aleatorios, solamente modifica este
'valor por otro (ej: 10, 15, 7, etc)
While Cont < 3
deNuevo:
'genero el aletorio:
Alea = Int((6 * Rnd) + 1)
'ahora busco en el rango si ese
'aleatorio existe:
On Error Resume Next
f = Range("cuadro").Find(Alea).Row
'si arroja un error quiere decir que
'el valor NO está, así que lo coloco:
If Err.Number <> 0 Then
Cont = Cont + 1
Range("cuadro").Cells(Cont).Value = Alea
Err.Clear
Else
'si no hay error, el valor ya se generó,
'así que repito las acciones:
GoTo deNuevo
End If
Wend
End Sub


aqui el link al archivo:
https://sites.google.com/site/damianomarsilva2/aleatorios_1-6.xls

Damian Omar Silva dijo...

perdona la ignorancia de mi primer comentario, seguro estás haciendo referencia al algoritmo de "floyd-warshall", el que te permite encontrar el camino mínimo.

Publicar un comentario en la entrada

Regresar a la Pagina de Inicio

ENTRADAS MAS RECIENTES (ULTIMAS 10)


las + vistas

10 ULTIMOS COMENTARIOS DE MIS LECTORES

Free counters!
blog de periodismo




GRAFICA RIO BRAVO
Serigrafia-Offset
Rosario - Santa Fe - Argentina
TE: 0341 4664028