Showing posts with label retos de la programación lúdica. Show all posts
Showing posts with label retos de la programación lúdica. Show all posts

Sunday, July 22, 2018

Un nuevo reto lúdico: los números de Munchhausen




Las matemáticas recreativas siempre presentan posibles retos para la programación. En esta ocasión hablaremos de los curiosos números de Munchhausen y plantearemos el reto a solucionar.

Dice la Wikipedia: "un número de Munchhausen (o Münchhausen) es un número natural n el cual la suma de sus dígitos (en base 10), elevados a la misma potencia de ellos mismos es el mismo número es decir n. Por ejemplo:

3435 = 3^3 + 4^4 + 3^3 + 5^5 = 27 + 256 + 27 + 3125 = 3435.

El término fue una invención del ingeniero y matemático holandés, Daan van Berkel, que en el 2009 estudió este tipo de números. La idea de llamarlos así a estos números se debe a que cada dígito está "elevado" por sí mismo y esto evoca la historia de Barón Munchhausen que se elevó a sí mismo hacia arriba jalando su propia coleta. Como todos sabemos, el Barón de Munchhausen era un mentiroso crónico e inventaba las más increíbles historias, recopiladas en un libro incluso.

La idea de estos números puede dar a un nuevo reto lúdico. Se trata de averiguar cuántos números hay con esta propiedad. El 1, por ejemplo, cumple pues es 1^1 = 1. El segundo número es el 3435 y parece que no hay más. Consideramos normalmente que 0^0 = 1, pero si tomamos la definición "no estándar" de que 0^0 = 0, entonces el número 438,579,088 es también de Munchhausen.

El reto lúdico es pues escribir un programa que dado un intervalo de números naturales, empezando en 1 y terminando en el número que se deseé, el programa encuentre en el menor tiempo posible cuáles son los números de Munchhausen. Aunque ya sabemos la respuesta, el ganador del reto será quien encuentre en el menor tiempo posible el resultado correcto, considerando un intervalo de al menos 10 millones de números: del 1 al 10 millones. Además, el programa deberá usar la definición estándar de 0^0 = 1 y 0^0 = 0, esto, desde luego, por separado.

Cabe señalar que yo ya escribí mi propia versión del reto. En este caso, le puse una opción que me dice qué número está procesando, pero para efectos de mediciones, le puedo quitar eso porque el despliegue de esta información hace mucho más lenta la ejecución del software.


El reto tendrá como premio una taza de la Morsa. Si el ganador es de provincia, se le mandará un USB de 8 GB al menos, porque mandar una taza por mensajería es ridículamente costoso. Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas satisfactorias, ganará quien la haya mandado primero. El ganador cede su código fuente a la comunidad. Es decir, se promueve el código abierto.

Las respuestas al reto deben mandarlas a morsa@la-morsa.com. A quien le interese ver mi programa corriendo, envíeme un mensaje a mi correo y le mandaré el enlace para que lo descarguen y vean mis resultados. ¡Suerte!

Monday, August 28, 2017

Nuevo reto de la programación lúdica: Números palindrómicos



Ya hemos hablado alguna vez de palíndromas, que son frases que se leen al derecho y al revés igual, por ejemplo, "Anita lava la tina", "Somos o no somos" (creación mía) o muchos otros como los estupendos palíndromas de Merlina Acevedo, del cual ponemos un solo ejemplo: "¿Anita lava lo ajeno como coneja o lava la tina?". De hecho, hay una manera de definir un palíndroma usando un palíndroma: "sé verlas al revés", lo cual sin duda es muy ingenioso.

Pero así como hay palíndromas en los idiomas humanos, también lo hay en las matemáticas. Existen los llamados palíndromas numéricos, también llamados "números capicúa". Hay una clásica conjetura de origen desconocido), que dice lo siguiente: "Se toma un número entero positivo cualquiera. El número se escribe entonces en orden inverso; los dos números se suman. El proceso se repite con el número suma, obteniéndose entonces una segunda suma, y se prosigue de igual forma hasta lograr un capicúa. La conjetura afirma que tras número finito de adiciones terminará por obtenerse un capicúa".

Por ejemplo, consideremos el número 68:

68 + 86 = 154
154 + 451 = 605
605 + 506 = 1111

Se sabe que si el número es de dos dígitos y la suma de sus cifras suman menos de 100, en el primer paso se obtendrá un palíndromo o capicúa. Por ejemplo:

34 + 43 = 77

La conjetura parece un divertimento tan simpático como el de los números maravillosos.  En 1967, dice Martin Gardner, en su libro "Circo Matemático", Charles W. Trigg descubrió que entre los números menores a 10 mil había nada menos que 249 números que no generaban palíndromos después de ejecutar 100 veces el proceso. El menor número en esas condiciones es el 196. En 1975, Harry J. Saal, realizó 237,310 iteraciones a partir de este número sin presentarse nunca sumas palindrómicas.  Trigg opina de hecho que la conjetura es falsa, aunque nadie ha podido demostrarla. Se conoce también que todos los enteros menores de 10 mil, a excepción de 249 números, producen palíndromas en no más de 24 iteraciones. Tan sólo el 89 y 98 requieren las 24. De los capicúas encontrados, el mayor es 16,668,488,486,661, generado por el 6,999 (y su retrógrado), o por 7,998 (y su retrógrado) en 20 pasos.

Con esta información entonces, el reto consiste en escribir un programa, en el lenguaje que mejor conozca el lector/concursante, y haga los cálculos para precisamente los 10 mil primeros números, entregando en los resultados la cantidad de iteraciones que se hizo en cada uno de ellos. Si el número de iteraciones es mayor de 100 entonces debe considerarse como un número que no cumple con la conjetura, al menos en principio. Es decir, no hay que hacer más de 100 iteraciones con cada número.

El software que genere estos resultados en menor tiempo posible, "impreso" en un archivo de texto, será el vencedor.


Al ganador (si es de la Ciudad de México), le daré una taza con el logotipo de la Morsa. Si es de otro país o de provincia, le mandaré un USB de al menos 8 GB. La razón de esto es que mandar una taza por mensajería es estúpidamente caro.

Las soluciones me las pueden mandar a morsa@la-morsa.com.

Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas que den el mismo tiempo al procesar la lista de 10 mil números, ganará quien la haya mandado primero. El ganador cede su código fuente a la comunidad. Es decir, se promueve el código abierto.

En este caso no hay restricción en qué lenguaje usar. El concursante tiene que mandar su código fuente, el ejecutable (si aplica) y los resultados obtenidos. El concurso tendrá una vigencia de unas tres semanas, aproximadamente.