20 de noviembre de 2010

Proyecto Euler

Al estar aprendiendo un nuevo lenguaje de programación resulta útil tener disponible una colección de ejercicios con que practicar. Project Euler es un sitio Web (en idioma inglés) que sirve justamente para este propósito.

Leonhard Paul Euler (1707-1783),
matemático y físico suizo.
Los problemas que aquí se encuentran (más de 300 al momento de estar escribiendo esto) son de naturaleza matemática, pero requieren de una computadora y de cierta destreza de programación para poderlos resolver correctamente. Para utilizar el sitio de manera efectiva es necesario registrarse (el registro no tiene costo). Los usuarios registrados pueden verificar si se han obtenido las soluciones correctas.

Los primeros problemas son los más sencillos, pero el nivel de dificultad aumenta conforme se va avanzando. Las personas a las que les gustan las matemáticas y los problemas de ingenio seguramente se toparán con retos muy interesantes.

El lenguaje Python resulta bastante adecuado para resolver muchos de los problemas presentados en Project Euler. Por ejemplo, el primer problema consiste en encontrar la suma de todos los números menores a 1,000 que sean múltiplos de 3 o 5. El siguiente programa en Python 3.1 encuentra la solución de este problema:
suma = 0
for i in range(1000):
    if i % 3 == 0 or i % 5 == 0:
        suma += i
print(suma)
Al correr el código se imprime la respuesta correcta: 233,168.

Para los amantes del código compacto, el mismo programa se puede escribir en una sola línea de código valiéndonos de la función predefinida sum y una list comprehension que genera la lista de los números que requerimos:
print(sum([i for i in range(1000) if i%3==0 or i%5==0]))
En una próxima entrada de este blog presentaré otro sitio, llamado Sphere Online Judge, que también es un excelente recurso para desarrollar la capacidad de resolver problemas, pero en un ámbito que va más allá de las matemáticas.