Sunday, November 14, 2021

apareando archivos de texto

Les presento a comm

Una poderosa herramienta para procesar archivos de texto que es parte del paquete GNU coreutils.


Comm compara dos archivos de texto línea por línea. Estos archivos deben estar ordenados.

Genera una salida en tres columnas, La primera de las columnas tiene los únicos del primer archivos, la segunda columna los datos únicos del segundo archivo y la tercer columna los datos comunes.

El separador de columnas por defecto es el tabulador pero se puede cambiar facilmente especificando el separador con --output-delimiter=STR

Otra opción interesante es mostrar el total de cada columna con --total.

También se pueden omitir algunas columnas.... Especificando -1 se omite la columna 1. especificando -12 quedan solamente los datos comunes del archivo!

la ayuda se puede visualizar ejecutando:

$ comm --help

man comm

otras herramientas que complementan a comm son unique y sort




Wednesday, May 26, 2021

Decorando la pantalla de una aplicación Ruby/TK

 Decorando la pantalla de una aplicación Ruby/TK


    Lo que aparenta ser un problema trivial es bastante complicado de resolver ya que la solución no se encuentra googleando.

    Hay muchísimos programadores que se han encontrado con el problema y no hay ejemplos en ningún idioma de como implementar la solución.

    Se trata de poner un ícono o cambiar el ícono que está por default en una solución desarrollada con Ruby/TK

    El quid de la cuestión está en el método Wm.iconphoto que está definido en el archivo wm.rb. (/var/lib/gems/2.5.0/gems/tk-0.4.0/lib/tk/wm.rb en mi GNU/Linux) 

esta es la solución:

require 'tk'
root = TkRoot.new;
path_imagen = './ruby.gif'
image_w = TkPhotoImage.new(:file => path_imagen)
Tk::Wm.iconphoto(root, image_w)
Tk.mainloop


y este es el resultado:

 

Saturday, October 03, 2020

Como diseñar cartones de Bingo

Existen dos tipos de bingo, con 75 bolillas y con 90 bolillas, la modalidad de 90 bolillas es la que se juega con cartones y se conoce (en Argentina) con el nombre de Lotería Familiar.


En wikipedia existe un excelente artículo que describe el juego tal como se juega en España. Se puede leer desde acá.


Un buen diseño de cartones de bingo requiere tener en cuenta una serie de tips, empezando por el tip más importante:

* Deben diseñarse "tiras" de 6 cartones de 15 números cada uno y cada tira deben estar los 90 números.


Además en cada cartón debe cumplir los siguientes tips:

  • cada cartón debe tener 15 números.
  • cada cartón debe tener 3 líneas, en cada línea debe haber 5 números.
  • cada cartón debe tener 9 columnas.
  • en cada columna los números debes estar ordenados de menor a mayor.
  • no deben existir columnas vacías.
  • no deben existir columnas con 3 números.
  • derivada de los últimos dos tips se tiene que en cada columna debe haber 1 o 2 números. (ni más, ni menos)
  • En la primer columna van los números del 0 al 9.
  • En la segunda columna van los números del 10 al 19.
  • En la tercer columna van los números del 20 al 29.
  • similar criterio para la cuarta, quinta, sexta, séptima y octava.
  • En la novena columna van los números del 80 al 89.

 

 

  • cada tira debe tener un número que la identifica univocamente.
  • cada cartón debe tener un número que lo identifica univocamente.

Estos dos últimos tips son muy importantes para hacer un control de los cartones/tiras puestos en juego en cada partida. 


proximamente publicaré un layout de tiras y algunos cientos de tiras (en formato csv) para uso libre.

¡Falta Envido!

 Proximamente....

¿cual es la probabilidad de ligar 33 en el truco? ¿y 32? ¿y 31?

 

En el estudio se analizará el truco tradicional, el que se jugaba en los boliches a 15 buenas y 15 malas y se anotaba con tapitas de cerveza...


Los Porteños cambiaron las reglas, ¡al truco se juega con flor....

Friday, October 02, 2020

Apostando al Loto 5

 Hace un tiempo atrás publiqué una entrada sobre apuestas al Quini 6. 

Al parecer la entrada no fue muy clara ya que un amigo que la leyó no pudo trasladar las fórmulas para aplicarlas al Loto 5.


Las fórmulas publicadas en la entrada de Quini 6 son correctas, voy a mostrar como se aplican para apuestas de Loto 5.


La apuesta básica de Loto 5 consiste en apostar a 5 números, el caso que voy a ilustrar es de una apuesta múltiple de 10 números.




Apuesto 10 números, acierto 5

¿cuantas con 5,4,3,2,1 y 0?

Nros ApostadosAciertos¿Cuantas con? (10-A)5-B =combinat(A;B)=combinat(C;D) E*F
Nros ApostadosAB CD EF Resultado
1055 50 11 1
1054 51 55 25
1053 52 1010 100
1052 53 1010 100
1051 54 55 25
1050 55 11 1


Apuesto 10 números, acierto 4

¿cuantas con 4,3,2,1 y 0?

Nros ApostadosAciertos¿Cuantas con? Diferencia (10-A)5-B =combinat(A;B)=combinat(C;D) E*F
Nros ApostadosAB CD EF Resultado
1044 61 1 6 6
1043 62 4 15 60
1042 63 6 20 120
1041 64 4 15 60
1040 65 1 6 6


Entonces.... la fórmula para utilizarla en una planilla de cálculo es: =combinat(A;B) * combinat(C;D)
donde: A+C debe ser igual al total de números apostados (10 en el ejemplo)
A: Es la cantidad de números acertados.
B: Es nuestra incognita principal... ¿Cuantas apuestas con B aciertos?
C: Depende de A y de la cantidad de números en total apostado. (en el ejemplo es 10-A)
D: Depende de B y de la cantidad de números que conforman una apuesta simple (5 en caso de Loto 5, 6 en caso de Quini 6) y se obtiene de restando B a la cantidad de numeros de la apuesta simple. (Loto 5: 5-B, Quini 6: 6-B)
E: es el resultado de la fórmula: =combinat(A;B)
F: es el resultado de la fórmula: =combinat(C;D)
Resultado: es la multiplicacion de E*F.

Tuesday, March 24, 2020

Lazarus / Freepascal problemas de teclado

El 24/03/2020 una actualización de ubuntu me dejó sin poder usar Lazarus durante un buen rato.
El problema es IBUS, los amigos de Trisquel encontraron la solución y lo único que tuve que hacer fue aplicarla.

https://trisquel.info/es/forum/problema-en-trisquel-7-al-programar-en-lazarus-free-pascal

En ubuntu los pasos son:
-Sistema
-preferencias
-personal
-soporte de idiomas.

En la opción:
Sistema de método de entrada de teclado,
seleccionar: ninguno



Listo, con eso funciona.

Saturday, February 08, 2020

Apostando al Quini 6

Hay mucha información sobre las probabilidades de ganar el Quini 6 y es fácil encontrar la justificación matemática del cálculo.

Lo que es complicado de encontrar es como se calculan los aciertos de los 'premios menores' con una apuesta múltiple.

Si estás leyendo esto es porque ya sabés que es una apuesta múltiple y sabés cuales son las probabilidades de acertar los 6 números.

Acá te voy a pasar las formulas para que calcules con tu planilla de cálculo favorita los aciertos a los premios menores.

Los cálculos los voy a hacer con una apuesta múltiple de 10 números, confío en que no vas a tener dificultad para adaptarlo a otra apuesta.

hipótesis 1
acertamos 6 números
¿Cuantas apuestas tienen 6, cuantas con 5, cuantas con 4 y cuantas con 3?
6 aciertos:   1 la fórmula es: =COMBINAT(6;6) * COMBINAT(4;0)
5 aciertos: 24 la fórmula es: =COMBINAT(6;5) * COMBINAT(4;1)
4 aciertos: 90 la fórmula es: =COMBINAT(6;4) * COMBINAT(4;2)
3 aciertos: 80 la fórmula es: =COMBINAT(6;3) * COMBINAT(4;3)

tip:
a1 + a2 = 10
b1 + b2 = 6
x aciertos: =COMBINAT(a1;b1) * COMBINAT(a2;b2)

 
hipótesis 2
acertamos 5 números
¿Cuantas apuestas tienen 5, cuantas con 4 y cuantas con 3?
5 aciertos: 5 la fórmula es: =COMBINAT(5;5) * COMBINAT(5;1)
4 aciertos: 50 la fórmula es: =COMBINAT(5;4) * COMBINAT(5;2)
3 aciertos: 100 la fórmula es: =COMBINAT(5;3) * COMBINAT(5;3)


tip:
a1 + a2 = 10
b1 + b2 = 6
x aciertos: =COMBINAT(a1;b1) * COMBINAT(a2;b2)

hipótesis 3
acertamos 4 números
¿Cuantas apuestas tienen 4 y cuantas con 3?
4 aciertos: 15 la fórmula es: =COMBINAT(4;4) * COMBINAT(6;2)3 aciertos: 80 la fórmula es: =COMBINAT(4;3) * COMBINAT(6;3)


tip:
a1 + a2 = 10
b1 + b2 = 6
x aciertos: =COMBINAT(a1;b1) * COMBINAT(a2;b2)


hipótesis 4
acertamos 3 números
3 aciertos: 35 la fórmula es: =COMBINAT(3;3) * COMBINAT(7;3)

tip:
a1 + a2 = 10
b1 + b2 = 6
x aciertos: =COMBINAT(a1;b1) * COMBINAT(a2;b2)



Saturday, February 23, 2019

Encoding en R

En la entrada anterior obtuve un dataframe, en teoría, encodeado con UTF-8

Pero al mostrar los datos el encoding no funcionaba.

Esto me funcionó

data$apellido <- iconv(data$apellido,"ISO-8859-1")

Implementación de la secuencia de Recamán en Ruby



v=[]
actual=0

(1..200).each {|i|
    v[actual]=1;
    if ( ( (actual-i)>=0 ) && v[actual-i].nil? )
        actual -= i
    else
        actual +=i
    end
    print actual, ","
}