sábado, 21 de febrero de 2026

Introducción a la criptografía (ESTALMAT-IB 17-18)

Rescato la presentación que utilicé en el curso 2017-2018 en una de las sesiones del programa de Estímulo del Talento Matemático (ESTALMAT) de les Illes Balears, dirigido a alumnado de 12-13 años.

En esta sesión hice una pequeña introducción a la Criptografía. Realizaron la actividad típica y sencilla del cálculo de la letra del DNI para pasar a mostrar el funcionamiento del algoritmo RSA con números pequeños y realizando los cálculos con wxMaxima.

Ver documento en Academia.edu

Tan importante como poco reconocida y recompensada la labor de divulgación científica con contextos cercanos.

viernes, 5 de diciembre de 2025

Advent of Code 2025

Cada diciembre, desde 2015, sale una nueva edición de Advent of Code. Es una web en la que proponen diariamente unos retos de programación, como si fuera un calendario de adviento.

 


 Este año la novedad es que sólo habrá 12 retos, en lugar de los 25 que había en las ediciones anteriores. Una de las características de dichos retos es que plantean problemas que puedes resolver utilizando cualquier lenguaje. Cada usuario tiene un conjunto de datos que debe tratar para dar solución a la pregunta planteada.

La falta de tiempo para dedicarle hizo que el año pasado me quedara en el día 15 de los 25 propuestos. Este año como son menos a ver si consigo acabarlos todos.

Iré subiendo en este repositorio de GitHub mis propuestas de resolución utilizando Python. Y cuando aparezca algo que me parezca interesante haré una entrada aparte en el blog para comentarlo.

El código del día 1 ya está subido :-) 

miércoles, 3 de septiembre de 2025

Probabilidad con baraja española: manotazo. Solución 3/3 (Matemáticas al rescate)

Todo comienza en un viaje familiar que inicia las vacaciones de verano. Un rato muerto. Una baraja española. Un recuerdo de juego en mi infancia. Y tras ir volteando cartas y diciendo los números consecutivos y "perder" casi todas las veces surge la pregunta: ¿qué probabilidad hay de ganar a este juego?


 Y ya tenemos la chispa encendida. Y siguen un papel y un boli con la probabilidad clásica, combinatoria, árboles y simplificaciones del problema para entender la magnitud real del mismo. Y la magnitud es demasiado grande para mis papeles. ¿Y si cojo el ordenador y programo un poco para contestar a la pregunta? Pero ahí también surgen dificultades.

Pero, como sucede con cierta frecuencia, en el proceso de investigar y buscar estrategias aparecen nuevos conocimientos que acaban hilándose hasta llegar al culmen.

Así que decidí dedicar algunos ratos libres para programar e ir contando en este blog todo de manera gradual y por fascículos.

Y antes de introducir el problema "grande" escribí esta entrada con un problema de urnas y bolas; y en esta otra entrada la solución (con la inesperada visita del número e). Intercalé esta entrada sobre el subfactorial y los desarreglos, que "casualidades de la vida" se utilizaban en la solución.

Parecía el fin de la cuestión y como quien cambia de tema aparece esta entrada sobre los polinomios de Laguerre y cómo calcularlos con Python y wxMaxima.

Y ahora sí, llega el problema original con la baraja de cartas. Enunciado en esta entrada, y primera solución es esta otra entrada. Pero nos encontramos con un problema de tiempos razonables de ejecución así que en esta nueva entrada cuento cómo hacer una aproximación empírica a la solución del problema.

Pero queda la traca final que pone fin a esta serie de entradas, como ya se ha puesto fin a la vacaciones de verano.

Resulta que existe una fórmula para calcular una generalización de los desarreglos cuando tenemos elementos que se repiten.

Teniendo r elementos diferentes, el primero que se repite n1 veces, el segundo n2 veces y así sucesivamente, el número de desarreglos viene dado por: 

Donde Pn_i es el polinomio de Laguerre de grado n_i. (Fuente

Por ejemplo, en una situación con 3 elementos que se repiten 1, 5 y 7 veces respectivamente, dentro de la integral definida tendremos (además de la exponencial de -x) los polinomios de Laguerre de grado 1, de grado 5 y de grado 7.

Por tanto, en nuestro problema original (13 números repetidos 4 veces), dentro de la integral tendremos 13 veces el polinomio de Laguerre de grado 4 (y la exponencial). Así que resolviendo esa integral podemos obtener la solución del problema.

En wxMaxima es muy sencillo y rápido (código en github):

Y la implementación en Python puede encontrarse también en mi repositorio de Matemática Recreativa de Github (ver código).

Con un tiempo de ejecución muy pequeño tenemos la respuesta al problema: la probabilidad de ganar en las condiciones planteadas es de aproximadamente 1,62%.

Recordad que con la estrategia de simulación empírica obtuvimos aproximadamente 1,63%. En este caso no necesitamos simulaciones, porque las Matemáticas tienen una manera relativamente sencilla de calcularlo, pero cabe destacar que la aproximación realizada es bastante buena.

¿Quién me iba a decir en casa de mi familiar cuando estaba jugando con la baraja española que acabaría utilizando integrales definidas con polinomios de Laguerre para contestar a mi pregunta sobre la probabilidad de ganar en el juego?

Pero una cosa sí que tengo constatada, cuando se dispone de tiempo libre siempre surgen buenas ideas. La rutina diaria y el ritmo de vida acelerado nos bloquean la creatividad.