Archive

Archive for March, 2008

Tweets del 29-03-2008

March 29th, 2008 Serabe No comments
article clipper Tweets del 29 03 2008
 
share save 171 16 Tweets del 29 03 2008

Tweets del 28-03-2008

March 28th, 2008 Serabe No comments
Categories: Juegos, Twitter Tags:

Tweets del 26-03-2008

March 26th, 2008 Serabe No comments
article clipper Tweets del 26 03 2008
 
share save 171 16 Tweets del 26 03 2008

Tweets del 25-03-2008

March 25th, 2008 Serabe No comments
article clipper Tweets del 25 03 2008
 
share save 171 16 Tweets del 25 03 2008

Tweets del 24-03-2008

March 24th, 2008 Serabe No comments
article clipper Tweets del 24 03 2008
 
share save 171 16 Tweets del 24 03 2008

Tweets del 23-03-2008

March 23rd, 2008 Serabe No comments
article clipper Tweets del 23 03 2008
 
share save 171 16 Tweets del 23 03 2008

Problema 2

March 23rd, 2008 Serabe No comments

Enunciado:
Suma todos los números pares de la sucesión de Fibonacci menores que un cuatro millón.

Primera solución:

La primera solución es muy simple. Hay un método que devuelve un array con todos los números de la sucesión de Fibonacci menores que un máximo max tomando como inicio un array de dos elementos arr.

[ruby]
def fib1(max,arr=[1,1])
while(arr.last < max) do
arr << (arr.last+arr[arr.size-2])
end
arr.pop
arr
end[/ruby]

Después simplemente se eliminan los impares y se suman los que quedan.

[ruby]
def euler2a(max, ini=[1,1])
fib1(max,ini).delete_if{|x| x%2 == 1}.inject{|memo,obj| memo+obj}
end

puts euler2a(4e6)[/ruby]

Segunda solución:

Esta solución es un poco mejor. Se va a hacer un nuevo método que calcule todos los números de la sucesión de Fibonacci menores que un máximo max pero que sólo almacene aquellos que pasen una condición que se le pasa como bloque:

[ruby]
def fib2(max,a=1,b=1)
arr = []
arr << a if yield(a)
while(b arr << b if yield(b)
a,b=b,a+b
end
arr
end[/ruby]

Después sólo hace falta pasar el filtro adecuado, y sumar los resultados:

[ruby]
def euler2b(max,a=1,b=1)
fib2(max,a,b){|x| x%2==0}.inject{|memo,obj| memo+obj}
end

puts euler2b(4e6)[/ruby]

Tercera solución:

Esta tercera solución es una modificación directa de la segunda. En vez de almacenar los datos, se suman directamente.

[ruby]
def fib3(max,a=1,b=1)
res = 0
res += a if yield(a)
while(b res += b if yield(b)
a,b=b,a+b
end
res
end

def euler2c(max,a=1,b=1)
fib3(max,a,b){|x| x%2==0}
end

puts euler2c(4e6)
[/ruby]

Y eso es todo.

Actualización: Hay diferencias entre la página de PyEuler y la del Proyecto Euler. El problema ha sido actualizado para corresponderse con esta última.

article clipper Problema 2
 
share save 171 16 Problema 2

Punto G

March 23rd, 2008 Serabe 1 comment

¿Usted sabía algo de esto?

0 Punto G
article clipper Punto G
 
share save 171 16 Punto G

Tweets del 19-03-2008

March 19th, 2008 Serabe No comments
article clipper Tweets del 19 03 2008
 
share save 171 16 Tweets del 19 03 2008
Categories: Anti-GOTAM, Maths, Twitter Tags:

Gráficos de radar o de araña con Gruff

March 17th, 2008 Serabe No comments

Gruff es una librería de Ruby para realizar gráficos. Es muy simple de usar, pero para ello, primero se ha de instalar. Nada más fácil:

sudo gem install gruff

Una vez instalado, se puede usar uno de los múltiples tutoriales que hay por Internet. Yo, por mi lado, me he decidido a hacer uno de un gráfico aún experimental: el gráfico de radar o de araña.

En primer lugar, importamos las librerías necesarias:

[ruby]
require ‘rubygems’
require “gruff”
[/ruby]

Para seguir, creamos el objeto necesario y le damos título:

[ruby]
g = Gruff::Spider.new 10
g.title = “Calificaciones”
[/ruby]

Ahora, añadimos los datos. El primer parámetro es el nombre que va a aparecer al lado del dato en cuestión. El segundo es un array de datos numéricos, en el caso que nos ocupa, es un simple número. Hay un tercer parámetro opcional: el color en hexadecimal.

[ruby]
g.data “Matemáticas”, 8.5
g.data “Historia”, 6.7
g.data “Lengua y Literatura”, 5.3
g.data “Eduación Física”, 4.8
g.data “Física y Química”, 8.9
g.data “Religión”, 10
[/ruby]

Ahora ya sólo queda guardar la imagen, lo cual es muy fácil. Simplemente:

[ruby]
g.write(‘marks.png’)
[/ruby]

He aquí el resultado (algunas letras se tapan con las líneas puesto que aún está en fase experimental):

marks.thumbnail Gráficos de radar o de araña con Gruff

En mi máquina, la media de ejecutarlo 100 veces es 0.32048496 segundos, el máximo es 0.40913s y el mínimo, 0.314553s.

Y eso es to, eso es to, eso es todo amigos.

article clipper Gráficos de radar o de araña con Gruff
 
share save 171 16 Gráficos de radar o de araña con Gruff