Saturday, December 17, 2011

Software para intercambio de regalos


En estas fechas navideñas, ¿quién no ha hecho intercambio de regalos con sus parientes y/o amigos? Esto se está volviendo una tradición porque es claro que regalarle a todos los parientes, a todos los conocidos, es algo que se ha vuelto prohibitivo y en consecuencia, en el intercambio de regalos solamente le tenemos que dar un buen regalo a una sola persona, lo cual tiene sus virtudes: primero, se le da algo de cierto valor mínimo (y máximo), y por otra parte, nos obviamos el dar regalos de relleno, los cuales quizás pasan al basurero o en el mejor de los casos al ropero, para después sacar ese obsequio en una emergencia y así simplemente quedar bien.

Pues con esto en mente y a petición de José Antonio Rodríguez, buen amigo y fiel lector de Matuk.com, nos dimos a la tarea de hacer un programa que -de una lista de nombres- sacara parejas de ellos de manera que se armara automáticamente la lista de intercambio de regalos, usando para ello la máquina que ya es una cotidianidad: la computadora.

El programa pide que se le alimente una lista de nombres y entonces hará los "pareos" entre personas. Una vez hecho esto, se puede guardar el resultado en un archivo de texto en disco, el cual se puede entonces re-enviar a todos las personas involucradas en el intercambio. Igualmente, se puede escribir la lista de nombres para que -si es necesario- puedan agregarse más adelante otros nombres. Cabe decir que si se agregan nuevos nombres, el pareo de quién le regalará a quién puede cambiar.

El programa muestra diferentes "pareos" entre los que le entran a un intercambio de regalos


Una opción que se le ha agregado es la de ordenar los nombres de las personas con las que se va organizar el intercambio de regalos, sin embargo, esto no influye en la manera en como el programa genera las parejas de intercambio.

El algoritmo que se usa es el siguiente:

  •      Se cuenta la cantidad de nombres que hay en la lista.
  •      Se saca un número al azar que vaya en el rango de 0 al número de personas en la lista
  •      Se guarda ese elemento en el pareo
  •      Se elimina ese valor de la lista
  •      Se cuenta la cantidad que ahora hay en la lista
  •      Se saca un número al azar que vaya en el rango de 0 al número de personas en la lista actualmente
  •      Se guarda ese elemento en el pareo
  •      Se manda al archivo de texto el pareo
  •      Se repiten los pasos 1 al 8 hasta que sólo queden dos nombres
  •      Se parean estos nombres y se termina el proceso

Se pueden hacer tantos pareos como se quiera. El programa divide cada pareo con una línea punteada. Si el número de personas es impar, se agrega un valor que dice "<>". Siempre se tiene que tener un número par de elementos para hacer los pareos.

Y sí, esto es parte de la programación lúdica, pero por problemas de tiempo y logística, esta vez no habrá video al respecto. Prometemos regresar con más el año que viene.



El enlace permanente para descargar el software aquí


He aquí el video sobre el tema, cortesía de Matuk.com:




Comentarios y sugerencias a mi correo: morsa@la-morsa.com

6 comments:

Fernando Barajas said...

¿Pa' cuando una versión web? :-)

Ernesto said...

Te propongo otro algoritmo para generar la lista de regalos.

Tu algoritmo implica que yo le regalaré algo a la persona que me regalará algo y requiere un número par de participantes.

Cada dupla representa dos transacciones de regalos.

Mi algoritmo es el siguiente:

Generar una lista de nombre ordenada de forma aleatoria. Es decir, someterla a un proceso de ordenamiento donde no se posible predecir el siguiente elemento de la lista si se conoce el actual y los anteriores.

Cada persona le regala a la persona que sigue en la lista.
El último de la lista le regala al primero.

1 le regala a 2
2 le regala a 3
3 le regala a 4
4 le regala a 5
5 le regala a 1

Si lo queremos generalizar

1 le regala a 2
2 le regala a 3
3 le regala a 4
4 le regala a 5
...
n le regala a 1

Pienso que en este caso es mejor visualizar la transacción que los participantes de dicha transacción.

Saludos

Ernesto said...
This comment has been removed by the author.
Morsa said...

Ernesto,

dersde luego que tu algoritmo es muy bueno y resuelve todas las dificultades. Prometo implementarlo -para el año que viene-

Un abrazo
Manuel

Ernesto said...

Gracias,

Espero que te hayas divertido en Acapulco.

Saludos!

Morsa said...

Sí, Ernesto, la he pasado espectacularmente bien.

Un abrazo
Manuel