[pyar] [OT] Software Libre para Bingo

1,654 views
Skip to first unread message

Juanjo Conti

unread,
Oct 18, 2010, 8:14:58 PM10/18/10
to Python Argentina
Estimados, unos amigos de mi pueblo están organizando un Bingo a
beneficio de algo y me pidieron si los ayudaba con el software para el
Bingo. Básicamente generar las tarjetas que serán impresas y
opcionalmente, en el sorto, ir cargando los números que van saliendo y
que avise cuando hay un ganador.

Alguien conocer algún software libre para hacer esto?

Si es en Python mucho mejor, por si tengo que hackearlo un poco.

Saludos!!
--
Juanjo Conti
blog: http://www.juanjoconti.com.ar
_______________________________________________
pyar mailing list py...@python.org.ar
http://listas.python.org.ar/listinfo/pyar

PyAr - Python Argentina - Sitio web: http://www.python.org.ar/

Ricardo Daniel Quiroga

unread,
Oct 18, 2010, 11:15:23 PM10/18/10
to Python Argentina
Hola
Ehh no al menos yo no conosco ninguna.. aunque generar los cartones es bastante sencillo... en unas cuantas lineas podes generar las conbinaciones de 15 elementos usando una funcion random..(leer un poco acerca de bingo en wikipedia) y solo te quedaria diseñar y exportarlos a un pdf con alguna herramienta como ReportLab.. y listo ya podes generar los cartones

Ahora bien.. control quien va ganando hay se hace medio complicado.. ehh se me ocurre crear una tabla con id (codigo del carton generado y llena de valores booleanos y tener una de respaldo con los numeros de dicho carton).. hacer una consulta llena de AND.. jaj  bue es una idea nunka la probe si funciona... espero que se entienda

Saludos

---------------------------------------------------------
           Ricardo Daniel Quiroga
---------------------------------------------------------
   msn:
          l2rada...@gmail.com
          ricard...@hotmail.com
   mails:
           l2rada...@gmail.com
           l2rada...@saltalug.org.ar
           ricardoqu...@gmail.com
           ricardo...@aprenderpython.com
   sitio Web:
          http://www.l2radamanthys.com.ar
   Facebook:
          http://es-la.facebook.com/L2Radamanthys
   Twitter:
         @l2Radamanthys

---------------------------------------------------------

Juanjo Conti

unread,
Oct 19, 2010, 11:41:31 AM10/19/10
to Python Argentina
2010/10/19 Ricardo Daniel Quiroga <l2rada...@gmail.com>:

> Hola
> Ehh no al menos yo no conosco ninguna.. aunque generar los cartones es
> bastante sencillo... en unas cuantas lineas podes generar las conbinaciones
> de 15 elementos usando una funcion random..(leer un poco acerca de bingo en
> wikipedia) y solo te quedaria diseñar y exportarlos a un pdf con alguna
> herramienta como ReportLab.. y listo ya podes generar los cartones

Justo cuando leía tu mail estaba pensando en esto. Googleando encontré
un simple script que sacaba cartones por stdout (print), lo mezclé con
mis conocimientos básicos de ReportLab y generé unos cartones
decentes!

Feature (en singular):

* Se asegura que no haya 2 ganadores. No se generan dos cartones con
los mismos números.

Acá está el código: http://svn.juanjoconti.com.ar/bingo/gen.py

Y acá un pdf con cartones de ejemplo:
http://svn.juanjoconti.com.ar/bingo/cards.pdf

Usé una fuente monoespaciada para no tener cartones de distinto ancho,
pero no me gusta mucho esta fuente (Courier). Alguien sabe como
establecer un ancho para las celdas?

Juanjo,

PS: Buscando en Itnernet aparecen algunos softwares para Windows pagos
y algunas páginas web que te permiten generar N cartones (siendo N
bastante chicos) y a cambio de un pago te dejan generar más cartones.

Ariel Marcelo Diaz

unread,
Oct 19, 2010, 12:36:08 PM10/19/10
to Python Argentina
Hace tiempo tuve que hacer un generador de cartones de bingo, y si
lo unico que hay que preocuparse es que genere correctamente los
cartones de bingo

Con report lab se encarga del resto, aunque es algo engorroso estar
vectorzando para generar bien los cartones

saludos

Joaquin Sorianello

unread,
Oct 19, 2010, 12:46:46 PM10/19/10
to Python Argentina
2010/10/19 Juanjo Conti <jjc...@gmail.com>:


y si generas los cartones con pyfpdf?? podes definir el template del
cartón y le asignas las variables (los numeros)


--
Joaquín Sorianello

Sea libre, use software libre

Juanjo Conti

unread,
Oct 19, 2010, 12:48:21 PM10/19/10
to Python Argentina
El día 19 de octubre de 2010 13:36, Ariel Marcelo Diaz
<ariel....@gmail.com> escribió:

>   Hace tiempo tuve que hacer un generador de cartones de bingo, y si
> lo unico que hay que preocuparse es que genere correctamente los
> cartones de bingo

A qué te referís con "generar correctamente los cartones"? Hay algo
que tener en cuenta? Algo que validar?

Saludos y gracias,


--
Juanjo Conti
blog: http://www.juanjoconti.com.ar

Juanjo Conti

unread,
Oct 19, 2010, 12:49:12 PM10/19/10
to Python Argentina
El día 19 de octubre de 2010 12:41, Juanjo Conti <jjc...@gmail.com> escribió:
> Alguien sabe como
> establecer un ancho para las celdas?

colWidths en el contructor de la tabla.

--
Juanjo Conti
blog: http://www.juanjoconti.com.ar

Ariel Rossanigo

unread,
Oct 19, 2010, 1:21:26 PM10/19/10
to Python Argentina
El 19 de octubre de 2010 12:41, Juanjo Conti <jjc...@gmail.com> escribió:
2010/10/19 Ricardo Daniel Quiroga <l2rada...@gmail.com>:

> Hola
> Ehh no al menos yo no conosco ninguna.. aunque generar los cartones es
> bastante sencillo... en unas cuantas lineas podes generar las conbinaciones
> de 15 elementos usando una funcion random..(leer un poco acerca de bingo en
> wikipedia) y solo te quedaria diseñar y exportarlos a un pdf con alguna
> herramienta como ReportLab.. y listo ya podes generar los cartones

Justo cuando leía tu mail estaba pensando en esto. Googleando encontré
un simple script que sacaba cartones por stdout (print), lo mezclé con
mis conocimientos básicos de ReportLab y generé unos cartones
decentes!

Feature (en singular):

* Se asegura que no haya 2 ganadores. No se generan dos cartones con
los mismos números.

Acá está el código: http://svn.juanjoconti.com.ar/bingo/gen.py


Juanjo, el problema es que dos cartones con distintos conjuntos de números pueden resultar ganadores....
Por ejemplo, c1= {1,2,3} y c2 = {1,4,5}, una posible secuencia de salida que hace que los dos ganen es [2,3,4,5,1] (obviamente el de c1 es el que termina más enojado :))


Martín Gaitán

unread,
Oct 19, 2010, 1:37:28 PM10/19/10
to Python Argentina
2010/10/18 Juanjo Conti <jjc...@gmail.com>:

> Estimados, unos amigos de mi pueblo están organizando un Bingo a
> beneficio de algo y me pidieron si los ayudaba con el software para el
> Bingo. Básicamente generar las tarjetas que serán impresas y
> opcionalmente, en el sorto, ir cargando los números que van saliendo y
> que avise cuando hay un ganador.
>
> Alguien conocer algún software libre para hacer esto?
>
> Si es en Python mucho mejor, por si tengo que hackearlo un poco.
>
> Saludos!!

para hacerla bien fácil yo usaría este modulito

http://pypi.python.org/pypi/texttable/0.7.0

que genera tablas "ascii" válidas como restructuredText

luego una simple pasadita por rst2pdf y tenés cartones bien bonitos.

Juan Pablo Deladoey

unread,
Oct 19, 2010, 2:58:00 PM10/19/10
to Python Argentina
2010/10/19 Ariel Rossanigo <arielro...@gmail.com>:

Segun lo que lei el reglamento establece:

- El juego finaliza cuando uno o más jugadores cantan "BINGO" al
completar el Cartón o alguna de las figuras mencionadas. El juego se
detiene inmediatamente y se verifican los números y la figura. Si hay
un ganador, se le otorga el premio. Si hay más de un ganador, el
premio se divide entre los ganadores en partes iguales.

no se, no entieno mucho de bingo.. nunca jugue...no me gusta la timba :P

saludos
--
Juan Deladoey

Ariel Rossanigo

unread,
Oct 19, 2010, 3:28:57 PM10/19/10
to Python Argentina
Claro, pero en el mail de Juanjo estaba como feature que no podía haber más de un ganador, lo cual es complicado de lograr; cada vez que haya un cartón con algún numero que coincida con otro, hay probabilidades de que los ganadores sean más de 1. La única forma de asegurar que no haya más de 1 ganador es generando muy pocos cartones; a simple vista 6....

Al final de cuentas, el chiste es encontrar los cartones que minimizen las probabilidades de que haya más de 1 ganador; al menos para hacer más divertido el juego. (el de hacer el programa :-P)

Juanjo Conti

unread,
Oct 19, 2010, 5:50:20 PM10/19/10
to Python Argentina
2010/10/19 Ariel Rossanigo <arielro...@gmail.com>:

> Juanjo, el problema es que dos cartones con distintos conjuntos de números
> pueden resultar ganadores....
> Por ejemplo, c1= {1,2,3} y c2 = {1,4,5}, una posible secuencia de salida que
> hace que los dos ganen es [2,3,4,5,1] (obviamente el de c1 es el que termina
> más enojado :))

Tenés toda la razón. Gracias. Vamos a ver como se soluciona.

--
Juanjo Conti
blog: http://www.juanjoconti.com.ar

Daniel

unread,
Oct 19, 2010, 5:53:00 PM10/19/10
to Python Argentina
El 19 de octubre de 2010 18:50, Juanjo Conti <jjc...@gmail.com> escribió:
2010/10/19 Ariel Rossanigo <arielro...@gmail.com>:
> Juanjo, el problema es que dos cartones con distintos conjuntos de números
> pueden resultar ganadores....
> Por ejemplo, c1= {1,2,3} y c2 = {1,4,5}, una posible secuencia de salida que
> hace que los dos ganen es [2,3,4,5,1] (obviamente el de c1 es el que termina
> más enojado :))

Por si sirve de algo, la loteria hogareña (el juego) tiene Serie de cartones para
que se elijan todos dentro de la misma serie para que no halla ganadores, siempre y cuando la combinatoria lo permita se puede hacer eso.

--
Daniel Malisani

Roberto Alsina

unread,
Oct 19, 2010, 5:55:28 PM10/19/10
to Python Argentina
Daniel writes:

> « HTML content follows »


>
>
>
> El 19 de octubre de 2010 18:50, Juanjo Conti

> <<URL:mailto:jjc...@gmail.com>jjc...@gmail.com> escribió:
>
>
> 2010/10/19 Ariel Rossanigo
> <<URL:mailto:arielro...@gmail.com>arielro...@gmail.com>:


>
> > Juanjo, el problema es que dos cartones con distintos conjuntos de
> números
> > pueden resultar ganadores....
> > Por ejemplo, c1= {1,2,3} y c2 = {1,4,5}, una posible secuencia de
> salida que
> > hace que los dos ganen es [2,3,4,5,1] (obviamente el de c1 es el que
> termina
> > más enojado :))
>
>
> Por si sirve de algo, la loteria hogareña (el juego) tiene Serie de
> cartones para
> que se elijan todos dentro de la misma serie para que no halla ganadores,
> siempre y cuando la combinatoria lo permita se puede hacer eso.

La unica manera de que no se pueda dar el caso de dos ganadores simultaneos
es si los cartones son disjuntos. La prueba es obvia ;-)

Juanjo Conti

unread,
Oct 19, 2010, 6:00:13 PM10/19/10
to Python Argentina
El día 19 de octubre de 2010 18:55, Roberto Alsina
<ral...@netmanagers.com.ar> escribió:

> La unica manera de que no se pueda dar el caso de dos ganadores simultaneos
> es si los cartones son disjuntos. La prueba es obvia ;-)

Claro! Necesitás M bolillas y N cartones de X número cada uno donde M / N = X.

No? Algo bastante impracticable.

Así que me parece que dejaremos que el azar mande.

--
Juanjo Conti
blog: http://www.juanjoconti.com.ar

Ariel Rossanigo

unread,
Oct 19, 2010, 7:46:29 PM10/19/10
to Python Argentina
El 19 de octubre de 2010 18:55, Roberto Alsina <ral...@netmanagers.com.ar> escribió:
Daniel writes:

« HTML content follows »



El 19 de octubre de 2010 18:50, Juanjo Conti <<URL:mailto:jjc...@gmail.com>jjc...@gmail.com> escribió:

     2010/10/19 Ariel Rossanigo    <<URL:mailto:arielro...@gmail.com>arielro...@gmail.com>:

     > Juanjo, el problema es que dos cartones con distintos conjuntos de    números
  > pueden resultar ganadores....
  > Por ejemplo, c1= {1,2,3} y c2 = {1,4,5}, una posible secuencia de    salida que
  > hace que los dos ganen es [2,3,4,5,1] (obviamente el de c1 es el que    termina
  > más enojado :))
 
Por si sirve de algo, la loteria hogareña (el juego) tiene Serie de cartones para
que se elijan todos dentro de la misma serie para que no halla ganadores, siempre y cuando la combinatoria lo permita se puede hacer eso.

La unica manera de que no se pueda dar el caso de dos ganadores simultaneos es si los cartones son disjuntos. La prueba es obvia ;-)

No es tan sencillo, si tomas los cartones
c1 = {1,2,3}
c2 = {1,2,4}
Puede haber ganadores simultáneos, pero, si agrego:
c3 = {1,3,4}
c4 = {2,3,4}

Ya no puede haber ganadores simultáneos, el truco es que en el momento en que dos cartones pueden empatar, automáticamente hay otro cartón que salio ganador.

Para poder hacer esto posible hay que tener en juego todos los cartones de la serie.
Una serie la puedo formar eligiendo k de N números del bolillero. En mi ejemplo, elegí 4 de 90 números del bingo. Tengo la posibilidad de armar  4 C 90 series posibles (lease combinaciones).  
Cada serie está formada por r C k cartones, siendo r < k. 

Es un problema interesante :)


Jose Luis Dallapiccola

unread,
Oct 19, 2010, 8:08:14 PM10/19/10
to Python Argentina
Hola, muy buenas noches a todos.

El tema es que dentro de la serie no se tiene que repetir el mismo
cartón (con sus 15 números).
En algún momento hice algo de cartones para "pavear". He generado
miles de cartones y es poco probable que haya cartones repetidos
(aunque si existe hay que descartarlo y generar otro).

Lo que no se podría hacer en la práctica es que solamente haya un ganador.

También generé PDF con los números y quedó algo similar al que adjunto
(el archivo lo convertí a png por problemas con el tamaño de los
archivos adjuntos permitidos en la lista).


--
---
José Luis DALLAPICCOLA
Neuquén Capital
Patagonia Argentina

carton.png

Roberto Alsina

unread,
Oct 20, 2010, 1:49:34 AM10/20/10
to Python Argentina
Ariel Rossanigo writes:

> La unica manera de que no se pueda dar el caso de dos ganadores
> simultaneos es si los cartones son disjuntos. La prueba es obvia ;-)
>
>
>
> No es tan sencillo, si tomas los cartones
> c1 = {1,2,3}
> c2 = {1,2,4}
> Puede haber ganadores simultáneos, pero, si agrego:
> c3 = {1,3,4}
> c4 = {2,3,4}
>
>
> Ya no puede haber ganadores simultáneos, el truco es que en el momento en
> que dos cartones pueden empatar, automáticamente hay otro cartón que salio
> ganador.

Ok, tenés razón, si los cartones cubren todos los subconjuntos disjuntos
posibles "tamaño cartón", entonces no es posible el empate.

Claro, en ese caso el bingo es exactamente lo mismo que una rifa porque
siempre sale en X jugadas donde X es la cantidad de numeros del cartón, lo
que le quita todo el suspenso ;-)

Y también, como decís, necesitás saber de antemano exactamente el número de
jugadores.

Roberto Alsina

unread,
Oct 20, 2010, 1:53:36 AM10/20/10
to Python Argentina
Roberto Alsina writes:

> Ariel Rossanigo writes:
>
>> La unica manera de que no se pueda dar el caso de dos ganadores
>> simultaneos es si los cartones son disjuntos. La prueba es obvia ;-)
>>
>>
>>
>> No es tan sencillo, si tomas los cartones
>> c1 = {1,2,3}
>> c2 = {1,2,4}
>> Puede haber ganadores simultáneos, pero, si agrego:
>> c3 = {1,3,4}
>> c4 = {2,3,4}
>>
>>
>> Ya no puede haber ganadores simultáneos, el truco es que en el momento en
>> que dos cartones pueden empatar, automáticamente hay otro cartón que salio
>> ganador.
>
> Ok, tenés razón, si los cartones cubren todos los subconjuntos disjuntos
> posibles "tamaño cartón", entonces no es posible el empate.
>
> Claro, en ese caso el bingo es exactamente lo mismo que una rifa porque
> siempre sale en X jugadas donde X es la cantidad de numeros del cartón, lo
> que le quita todo el suspenso ;-)
>
> Y también, como decís, necesitás saber de antemano exactamente el número de
> jugadores.

Ah, y en el caso de la loteria de cartones "tradicional" (90 numeros,
15 x cartón era?) el numero de jugadores necesarios es 126000 si no estoy
demasiado dormido :-)

Rita

unread,
Oct 20, 2010, 6:53:43 AM10/20/10
to Python Argentina
No se si podrá ser de alguna utilidad, este enlace es de un software
escrito para los moviles/pda con sistema operativo Linux (android)

El programa se llama Bingomatic

http://www.android-spa.com/verAplicacion.php?id=263

Saludos!

Ariel Rossanigo

unread,
Oct 20, 2010, 8:28:28 AM10/20/10
to Python Argentina
El 20 de octubre de 2010 02:53, Roberto Alsina <ral...@netmanagers.com.ar> escribió:
Roberto Alsina writes:

Ariel Rossanigo writes:

  La unica manera de que no se pueda dar el caso de dos ganadores    simultaneos es si los cartones son disjuntos. La prueba es obvia ;-)



No es tan sencillo, si tomas los cartones
c1 = {1,2,3} c2 = {1,2,4}
Puede haber ganadores simultáneos, pero, si agrego:
c3 = {1,3,4}
c4 = {2,3,4}


Ya no puede haber ganadores simultáneos, el truco es que en el momento en que dos cartones pueden empatar, automáticamente hay otro cartón que salio ganador.

Ok, tenés razón, si los cartones cubren todos los subconjuntos disjuntos posibles "tamaño cartón", entonces no es posible el empate.

Claro, en ese caso el bingo es exactamente lo mismo que una rifa porque siempre sale en X jugadas donde X es la cantidad de numeros del cartón, lo que le quita todo el suspenso ;-)

No precisamente, hay que elegir un subconjunto de los 90 números (por ejemplo 16) y armar todas las combinaciones posibles de ese conjunto. Luego juegan los 90 números. Si elegis 16 hay 74 numeros donde nadie marca nada.... pero bueno, la idea es esa. 

Se puede mejorar armando varias series disjuntas, de esa manera siempre alguien marca algo :)

Les dejo un script bastante imperfecto, pero que muestra la idea [0]. Faltaría agregarle varias cosas, por ejemplo:
* posibilidad de armar varias series
* mejorar la distribución en decenas para cada serie
* hacer que los cartones tengan entre 0 y 3 números por decena

Saludos.

Juanjo Conti

unread,
Oct 20, 2010, 10:07:45 PM10/20/10
to Python Argentina
2010/10/20 Ariel Rossanigo <arielro...@gmail.com>:

Tengo tu código a mano para experimentar, pero mientras tanto hice
varias corridas simuladas y siempre sale 1 solo ganador:
http://svn.juanjoconti.com.ar/bingo/check.py

Saludos,

--
Juanjo Conti
blog: http://www.juanjoconti.com.ar

Sebastian Bassi

unread,
Oct 21, 2010, 9:04:54 AM10/21/10
to Python Argentina
2010/10/20 Roberto Alsina <ral...@netmanagers.com.ar>

Y también, como decís, necesitás saber de antemano exactamente el número de jugadores.

Y se puede comprar mas de un cartón por persona.

Ricardo Daniel Quiroga

unread,
Oct 21, 2010, 4:28:33 PM10/21/10
to Python Argentina

Ehh sobre.. si salen mas de un ganador eso es posible dentro de lo que son las reglas del bingo.. asi que el tema de lograr que haya uno solo ganador ya es cuestion propia o algo para etretenerse.. :P se supone q si se generaran todos los cartones posibles ese problema estaria salvado.. pero bue..

  
Y también, como decís, necesitás saber de antemano exactamente el número de jugadores.

Y se puede comprar mas de un cartón por persona.


Solo se necesitaria saber q cartones son los q jugaran.. (osea de todos los cartones generados cuales fueron vendidos)

Saludos
segun lo que lei del reglamento del bingo no hay ninguna restricion sobre eso asi tendria que ser posible que una persona pueda comprar mas de un carton si lo desea...


Reply all
Reply to author
Forward
0 new messages