Time to Radians: Midiendo el tiempo en ángulos (en radianes)

Labs, Matemática, Programación 2 Comments »

La gente normal -o la gente de otras ciencias, mejor dicho- puede que mida los ángulos en grados: 90º, 180º, 360º. Sin embargo, los matemáticamos creemos que la forma en la que se miden los grados es por radianes. La conversión entre radianes y grados es muy sencilla y es por regla de tres simple. π equivale a 180º, por lo que, por ejemplo, 90º sería π/2. Entonces, la vuelta entera, es 2π.

Y así como a veces uno usa el sistema de las agujas reloj para señalar cosas por la calle y pasar desapercibido, Fepe empezó a decirme la hora en radianes cada vez que salía el tema. La idea de hacer algo que calcule automáticamente eso no tardó en llegar y acá está: Time to Radians.

Toma la hora de la PC del usuario con Javascript, y luego con PHP hace los cálculos para pasarla a radianes y luego dibujarla para que el API de Charts de Google la entienda.

No fue más que una curiosidad y un ejercicio para mí, el cual fue bastante divertido hacer. Ahora está ahí, subido, para todo el que quiera verlo.

Foto original del post en Flickr

Athena Kurukshetra 2010, la competencia matemática

Matemática, Programación 3 Comments »

Kurukshetra 2010 es la conferencia internacional de tecnología de la Universidad Anna, de Chenai, en la India.

La organización preparó un proyecto llamado Athena, el cual será una competencia para resolver problemas de índole matemáticos-lógicos a través de la programación (como el Project Euler, pero plasmado en una competencia).

Para participar solo hace falta registrarse gratuitamente en el sitio de la conferencia y luego ingresar con ese usuario al sistema de Athena.

Mañana 6 de enero, apartir de la 5PM de India, estará disponible la primera fase que será de práctica, en la que los participantes se podrán familiarizar con el sistema.

La competencia per sé será desde el 8 de enero hasta el 15 de enero.

Saber si un número es primo o no… con expresiones regulares

Matemática, Programación No Comments »

Saber si un número es primo -aquellos solo divisibles por sí mismos y por el número 1- es una tarea que en programación significa funciones recursivas. Algunas más optimizadas que otras, pero siempre terminamos en fijarnos si el número que queremos chequear es múltiplo de los números menores.

Hoy, navegando y leyendo, me encontré con algo que me sorprendió y me pareció muy curioso: como saber si un número es primo o no verificándolo con expresiones regulares.

En el 2000, en la conferencia de Perl Yet Another Perl Conference, en una charla se presentó una forma de verificar esto. Lo que hay que hacer es, primero, pasar el número que queremos verificar a una cadena de 1, donde la cantidad de 1 que aparecerán es el número que queremos verificar.

Es decir, si queremos verificar el número 7, tendremos que pasarlo a 1111111. Si queremos verificar el 15, será 111111111111111. Y luego, a esa cadena de 1, tenemos que ver si coincide con esta expresión regular:

/^1?$|^(11+?)\1+$/

Si no coincide, entonces el número es primo. Es algo muy sencillo de hacer en programación. En PHP se verifica con algo tan simple como

preg_match('/^1?$|^(11+?)\1+$/', str_repeat(1, $n))

Esta expresión se puede dividir en dos para entenderla mejor, con el signo |. La primera parte es solo para verificar si se le pasan los números 0 o 1, pues ambos no son primos pero sin esa excepción darían que sí lo son. La segunda parte es donde se produce la magia…

Lo que hace la expresión regular es primero si el número que le pasamos es de la forma 11 o alguna cadena múltiplo de esa: es decir, 11, 1111, etc. Es decir, que esté formada por onces. Si no, volverá atrás y le agregará un 1 al anterior y volverá a probar lo mismo. O sea, luego probará con 111 y cadenas con ciento onces: 111111, etc.

El siete, por ejemplo, no encaja en ninguna de estas formas. No se puede formar con el 11 ni con el 111, ni mucho menos con el 1111 (ya que luego habrá 8 unos). Si pudiese formarse con alguna cadena de unos, es porque es un múltiplo de un número anterior.

Es una forma muy original y rápida de calcular si un número es primo, sin la necesidad de crear una función que verifique matemáticamente esto. Sin embargo, en lenguajes como PHP, falla con números grandes. La razón es la incapacidad de guardar variables con muchas caractéres, lo que sucede al tratar de guardar la variable que almacena los unos de un número como, por ejemplo, un 1.000.000.

Imagen del post del comic de XKCD

Destacar los miniposts en el RSS de WordPress

Programación, Wordpress 2 Comments »

Los miniposts suelen ser una práctica muy útil en los blogs: permiten compartir ideas rápidas (a menudo links interesantes) sin la necesidad de escribir un post largo ni emitir opinión elaborada. Simplemente un comentario corto.

La forma en que reconocemos a los miniposts es por su diseño minimalista comparado con como se muestran los demás posts del blog. Usualmente, se omite el título del minipost y el link a los comentarios del mismo se presenta seguido. Al entrar al blog, uno los reconoce fácilmente. No obstante, si uno está suscripto vía el feed, la diferenciación es nula, y los lectores pueden quedar confundidos ante posts que son muy cortos. Es por eso que acá voy a explicar cómo diferenciar los miniposts en el RSS para que el lector pueda darse cuenta que se encuentra ante un post de este tipo.

Lo que haremos será básicamente dos cosas: mediante la función get_the_category de WordPress, definiremos si un post es un minipost, y si es así, haremos que aparezca antes del título en el RSS la leyenda [MiniPost]. Para esto último, solo tendremos que modificar el archivo feed.php en la carpeta wp-includes, que contiene las funciones para el feed.

Entonces, abrimos el archivo feed.php y buscamos la función get_the_title_rss() (en el feed.php original, está en la línea 114). Lo que habrá que agregarle a esa función es el siguiente código:

$Categorias = get_the_category();
	foreach($Categorias as $Categoria)
	{
		if($Categoria->cat_ID == ID_DE_LA_CATEGORIA_DE_MINIPOSTS)
		{
			$MiniPost = 1;
		}
	}
	if($MiniPost == 1){
		return "[MiniPost] ".$title;
	}
	else{
		return $title;
	}

Obviamente, tenemos que reemplazar el ID_DE_LA_CATEGORIA_DE_MINIPOSTS por el Id que corresponde a la categoría de nuestro blog.

Lo que hace el código es muy sencillo. Primero, mediante la función get_the_category, guardo las categorías del post en la variable Categorias. Con el foreach, recorro las categorías del post y comparo si alguna es igual a la categoría de los miniposts, y si es así, defino la variable $MiniPost = 1. Luego, comparo: si $MiniPost = 1, devuelvo [MiniPost] + El título de post en el RSS. Si $MiniPost no es igual a 1, solo devuelvo el título del post.

La función get_the_title_rss() completa, quedaría así:

function get_the_title_rss() {
	$title = get_the_title();
	$title = apply_filters('the_title_rss', $title);
	$Categorias = get_the_category();
	foreach($Categorias as $Categoria)
	{
		if($Categoria->cat_ID == ID_DE_LA_CATEGORIA_DE_MINIPOSTS)
		{
			$MiniPost = 1;
		}
	}
	if($MiniPost == 1){
		return "[MiniPost] ".$title;
	}
	else{
		return $title;
	}
}

Espero que les haya servido. Cualquier duda pueden dejarla en los comentarios.

Captura de los miniposts de Gran Ímpetu

Project Euler: Programando soluciones a problemas matemáticos

Matemática, Programación No Comments »

Project Euler no es un sitio nuevo pero es un sitio que descubrí hace poco y me pareció muy interesante: una serie de desafíos matemáticos para encarar desde el lado programación.

Tal como dicen en su about, no es el conocimiento matemático el que va a ser vital (aunque sí puede llevar a códigos más elegantes), si no la habilidad en la programación.

El sitio cuenta con 262 problemas para resolver, a los que se puede acceder sin siquiera estar registrado. Sin embargo, si nos abrimos una cuenta en el sitio, vamos a poder saber si nuestra solución es la correcta, llevar un conteo de cuantos problemas solucionamos con éxito y compartir con otros usuarios la experiencia.

Me parece que es un sitio útil para dos objetivos en particular: uno de ellos es por si te gusta la matemática y querés desafíos en esa área. El segundo -e interesante-, es para empezar a programar en un nuevo lenguaje que estés aprendiendo, ya que con los problemas uno aprende nuevas técnicas (aprender a utilizar bucles, condiciones, arrays, etc.). Personalmente, me está sirviendo bastante para descubrir cosas en Python. Así que ahí queda, recomendado!

Foto original del post en Flickr


Design by j david macor.com.Original WP Theme & Icons by N.Design Studio
RSS Comentarios RSS Acceder