domingo, 14 de noviembre de 2010

Algoritmo del día del fin del mundo

El matemático británico John Horton Conway es considerado uno de los mayores creadores y divulgadores de pasatiempos matemáticos de todos los tiempos. Una de sus más interesantes contribuciones es el denominado "algoritmo del día del fin del mundo" que permite determinar (mentalmente y en menos de 30 segundos) qué día de la semana fue o será una fecha cualquiera del calendario Gregoriano. Te mostramos, paso a paso, cómo realizar ese truco.

Es posible que alguna vez hayas visto en la tele algún “mentalista” adivinar qué día de la semana corresponde a una fecha cualquiera, proporcionada por el conductor o alguna llamada telefónica. Seguramente habrás imaginado que detrás de todo el numerito montado por el “artista” había un algoritmo lo suficientemente simple como para ser “ejecutado” mentalmente, sin errores y en unos pocos segundos. Dicho sistema existe, y ha sido diseñado por uno de los matemáticos especializados en divulgación y pasatiempos más famoso de todos los tiempos: John Horton Conway.

Este británico, de 72 años, es una verdadera leyenda viviente, responsable de cientos de pasatiempos y acertijos sumamente interesantes. Uno de ellos es el que le permite “adivinar” que día de la semana fue (o será) una fecha cualquiera. Se dice que la clave de su ordenador se basa en este algoritmo: la máquina le muestra una fecha aleatoria y en menos de 30 segundos Conway debe responder que día de la semana fue. Obviamente, como protección dista mucho de ser segura, ya que cualquier instruso con un segundo ordenador y un software de calendario a mano podría responder a la pregunta planteada sin problemas, pero Conway lo utiliza como una forma de “mantener su mente despierta”. El matemático ha denominado a su sistema como “algoritmo del día del fin del mundo” (“Doomsday algorithm” o “Doomsday rule”).

El funcionamiento del “Doomsday algorithm” se basa en la premisa de que para cualquier año existen una serie de fechas fáciles de recordar que “caen” siempre en el mismo día de la semana. Los años bisiestos -aquellos en que febrero tiene 29 días- suponen una complicación adicional, ya que todas las fechas posteriores a ese día se “corren”, pero Conway evita este problema de la misma forma como lo hacían los romanos: considerando el primer día del año al 1 de Marzo, y como “fin de año” el último día de febrero. Las fechas que debemos recordar son las siguientes:

- El “0”de Marzo” (el último día de Febrero, en realidad)

- El 4 de Abril
- 9 de Mayo
- 6 de Junio
- 11 de Julio
- 8 de Agosto
- 5 de Septiembre
- 10 de Octubre
- 7 de Noviembre
- 12 de Diciembre
- 2 de Enero (del año siguiente)- 13 de Febrero (del año siguiente)

¿Crees que es imposible recordar esas fechas? Pues te equivocas. Si miras con detenimiento la lista anterior, notarás que -dejando de lado los meses de enero y febrero, todas las correspondientes a meses pares tienen la forma “n/n” :4/4, 6/6, 8/8, 10/10 y 12/12. Y las que corresponden a los meses impares son 9/5, 11/7, 5/9 y 7/11. Estas cuatro pueden resultar un poco más difíciles, pero los anglosajones lo tienen fácil gracias al mnemónico "I work from 9 to 5 at the 7-11" ( "Trabajo de 9 a 5, en el Seven-Eleven", una cadena de tiendas muy famosas en Estados Unidos). Como sea, esa frase nos permite recordar las cuatro fechas en cuestión. Y la dos restantes corresponden al día de la toma de Granada y la víspera de San Valentín, así que con poco trabajo lograrás memorizar la lista.

Esas fechas, caen todas en el mismo día de la semana, y Conway las denomina “Día del Juicio", de donde proviene el nombre del algoritmo. Determinando que día de la semana es el que corresponde para el año de la fecha que queremos “adivinar”, podemos calcular sin problemas el dato que estamos buscando. Para encontrar el “Doomsday” aprovechamos que el calendario Gregoriano (el mismo que usamos todos los días en nuestra vida cotidiana) se repite cada 400 años, o lo que es lo mismo, cada cuatro siglos. Para simplificar los cálculos, vamos a asumir que cada siglo comienza en los años acabados en "00" y finalizan en los años acabados en "99". Conway llama al primer “Doomsday” de cada siglo “marcador de siglo”, y se repite cada 400 años. Esos días son:

- Siglo 1800-1899: Viernes- Siglo 1900-1999: Miércoles
- Siglo 2000-2099: Martes
- Siglo 2100-2199: Domingo

Veamos ahora cómo calcular el “Doomsday” de un año cualquiera. Si llamamos “y” a los dos últimos dígitos del año en que estamos trabajando, el “Doomsday” correspondiente se calcula con la siguiente fórmula:

Antes de que cierres el navegador espantado por semejante sarta de símbolos matemáticos, lee la siguiente explicación: El Doomsday se calcula sumando al marcador del siglo el resultado de la división (sin tener en cuenta los decimales) entre los dos últimos dígitos del año y 12, más el resto de dicha división, más ese mismo resto dividido 4. En otras palabras, tomamos “y”, lo dividimos por 12 para obtener un cociente (“g”) y un resto (“r”). A “r” lo dividimos por 4 y obtenemos un nuevo cociente (“s”). El “Doomsday” del año es igual a y+q+r+s. Si ese valor es mayor que 7 (algo muy probable) lo dividimos entre 7 y nos quedamos con el resto. ¡Es fácil!

Veamos un ejemplo. Supongamos que queremos calcular que día de la semana fue el 14 de Octubre de 1968. El marcador para ese siglo (1900-1999) es Miércoles, y el valor de “y” es 68, que al dividir entre 12 nos da 5, con resto 8. Al dividir el resto entre 4 nos da 2, así que el “Doomsday” es igual a 68 + 5 + 8 + 2 = 83. Dividimos por 7 y obtenemos el resto: 6. Como el marcador de ese siglo es Miércoles, el 10/10 nuestra referencia para ese mes, y 6 nuestro “Doomsday”, contamos hacia delante 6 días: Miércoles, Jueves, Viernes, Sábado, Domingo y Lunes. Es decir, el 14 de Octubre de 1968 es Lunes. ¿Interesante, verdad? Otro ejemplo rápido: hoy es 12 de Noviembre de 2010 ¿Que día de la semana es? Fácil: Marcador de siglo: Martes. “Doomsday” igual a 6 (te dejamos calcularlo a ti, recuerda que para 2010 “y” = 10). El 7/11 es nuestro marcador más cercano, y es Domingo (6 días contando a partir de Martes). Si el 7/11 fue Domingo, el 12/11 es Viernes. Sabiendo todo esto: ¿Te animas a calcular que día de la semana fue cuando naciste?

La ropa para ser invisibles a un paso

Investigadores de la Universidad de Saint Andrews en Escocia han desarrollado un material que da un paso más hacia la creación de prendas de invisibilidad capaces de manipular la luz para ocultar los objetos de la visión.

Dos de los principales retos en el desarrollo de una prenda que pueda hacer invisibles los objetos que cubre son, por un lado, producir meta-átomos lo suficientemente pequeños para interactuar con la luz visible y, por otro, que estos diminutos elementos sean lo suficientemente flexibles.

Los físicos han diseñado un nuevo material denominado Metaflex que puede superar ambos obstáculos. Este metamaterial, compuesto de meta-átomos capaces de desligarse de una superficie rígida, interactúa de forma especial con la luz. En vez de reflejarla, la curva, de manera que los rayos que lo rodean recuperan su trayectoria y siguen su camino. Lo que se sitúa detrás de este material especial, simplemente, se esfuma en el aire. Este efecto de invisibilidad ya se había conseguido otras veces, pero en esta ocasión da un paso más allá. Anteriormente, el efecto se había conseguido con luz no visible (infrarrojos y microondas). Ahora, se ha conseguido dentro del rango de luz visible para el ojo humano. Cualquiera puede comprobarlo.

Además, los autores también han conseguido que el material sea flexible y lo suficientemente grande para que no se quede sólo en el ámbito experimental de la nanotecnología y pueda adoptarse para una variedad de aplicaciones. Su muestra mide 5x8 milímetros cuadrados. El nuevo material podría utilizarse para crear ropa inteligente y en lentes de contacto desechables. Está claro que no es una capa de invisibilidad aún, pero es el paso correcto hacia ella.

La mente que resuelve 309 problemas matemáticos

Si perteneces al grupo de personas que gustan de enfrentarse a un buen desafío, Project Euler es ideal para ti. Se trata de una serie de problemas que involucran matemáticas y programación, que los aficionados deben intentar resolver. En este momento hay 309 problemas propuestos, y en pocas horas estará disponible el número 310. ¿Te animas a ser el primero en resolverlo?

No son pocos los programadores que gustan de los problemas matemáticos. También es cierto que a muchos matemáticos les gusta programar. A ambos grupos seguramente les interesará conocer el denominado Project Euler, una colección de desafíos que requieren de talento matemático y habilidades relacionadas con la programación para ser resueltos.

El objetivo del proyecto es simplemente estimular a los participantes a desarrollar mejores habilidades de programación, aprender conceptos nuevos y divertirse. El nombre de este proyecto honra a Leonhard Euler, el brillante matemático y físico suizo cuyo aporte más conocido es el número de Euler (e ≈ 2.71828), utilizado como base del logaritmo natural. Euler realizó trabajos relacionados con el Cálculo infinitesimal, la Teoría de Grafos, la dinámica de fluidos, óptica y astronomía. Por todo esto se lo considera uno de los matemáticos más importantes de todos los tiempos.

Los problemas propuestos suelen ser bastante complicados, pero con un poco de imaginación, habilidad matemática y una buena dosis de lógica, los podrás resolver. Para conocerlos no hace falta registrarse. Con solo visitar la web puedes acceder a la lista de problemas disponibles y comenzar a resolverlos. Pero si quieres ir “sumando puntos” a medida que los resuelves, puedes crearte una cuenta de usuario y comenzar a recorrer la lista de problemas como todo un profesional.

Un aspecto interesante del Project Euler es que los problemas propuestos se resuelven utilizando un ordenador poco potente en menos de un minuto. Por ejemplo, el problema número 48 dice: “Encuentra los últimos 10 dígitos de la serie 1¹ + 2² + ... + 1000¹ººº.” Está claro que utilizando “fuerza bruta” eso no se resuelve en menos de un minuto, por lo que deberás concentrarte en encontrar un algoritmo eficiente que te evite esperar años mientras tu pobre ordenador trabaja.

Solo se debe brindar la respuesta correcta. No importa la forma en que hayas escrito tu programa, algo bastante lógico ya que siempre hay varios caminos para lograr el mismo objetivo. Eso significa que puedes usar tu lenguaje de programación favorito (Java, PHP, Cobol, Pascal, C, C++, ensamblador o incluso el BASIC de tu vieja Commodore 64) para resolver cada problema. Cuando lo hayas hecho, tendrás acceso a un foro en el que podrás comparar tu solución con la de otros participantes y ver quién obtuvo la mejor, algo que seguramente te ayudará a mejorar tu estilo y resolver los próximos problemas.

Por supuesto, si buscas un poco por la Red encontrarás las respuestas a casi todos los desafíos planteados y podrás avanzar rápidamente hacia el final. Y de paso, perderás la oportunidad de aprovechar esta genial idea para aprender un montón de cosas nuevas mientras encaras estos desafíos. En definitiva, y a pesar de que no hay “premios” en el sentido tradicional de la palabra, Project Euler puede hacer de ti un verdadero ganador. Si encaras cada problema con tiempo e ingenio, seguramente desarrollarás habilidades nuevas, descubrirás métodos de optimización que ignorabas y pasarás muchas horas entretenido. ¡Y gratis! En este momento hay 309 problemas propuestos, y en pocas horas estará disponible el número 310. ¿Te animas a ser el primero en resolverlo?