[Madrid-pm] Nuevo módulo
Joaquin Ferrero
explorer en joaquinferrero.com
Mie Mar 28 16:23:06 PDT 2007
El otro día se me ocurrió hacer un módulo nuevo: Metro::Madrid.
Es obvio para qué podría ser utilizado 7B^)
En CPAN no he visto nada relacionado con el metro, salvo el
Acme::MetaSyntactic::metro, que es una tontería.
Es decir... ¡crearíamos una rama nueva en CPAN!
Algunos submódulos y funciones interesantes:
Metro::Madrid - Funciones y métodos sobre el metro de Madrid
# Creación del objeto
my $metro = Metro::Madrid->new();
# Datos básicos
print $metro->lines(); # Número de líneas
print $metro->names(); # Nombre de las líneas
print $metro->names(7); # idem, de la línea 7
print $metro->linename(7); # idem
Metro::Madrid::Stations - Lista de las estaciones de metro
$x = $metro->stations(); # Número de estaciones
@x = $metro->stations(); # Nombre de estaciones
$x = $metro->stations(7); # idem, de la línea 7
# Impresión de las estaciones de la línea 7
print $metro->line(7);
# Lo mismo, en un sentido determinado
print $metro->line( {Direction => 0}, 7);
# Devuelve el transbordo (nombre de la estación)
# de la línea 7 hacia la línea 5.
# Si no existe ese transbordo, devuelve undef
print $metro->line({Transfer => 5}, 7);
# Lo mismo, pero en vez del nombre, el número de la
# estación
print $metro->line({Transfer => 5, index => 1}, 7);
Metro::Madrid::Schedule - Tiempos de apertura y periodicidad
# Horarios de apertura de una línea
print $metro->schedule(7);
# Idem, pero sólo de una estación
print $metro->schedule({Line => 7, Station => 2});
print $metro->schedule(7.2);
# Tiempo entre trenes, a las cuatro de la tarde
print $metro->period({ Line => 7, Hour => 16 });
# Idem, en día festivo
print $metro->period({ Line => 7, Hour => 16, Holiday => 1 });
Metro::Madrid::Routes - Encaminamiento de una estación a otra
# El camino más corto para ir
# de Francos Rodríguez a Lavapies
print $metro->route( {
LineFrom => 7,
Origin => 16,
LineTo => 3,
Target => 5
});
# Idem, abreviado
print $metro->route( 7.16, 3.5 );
# Idem, privilegiando el minimizar el número de paradas
print $metro->route({MinStops => 1 }, 7.16, 3.5 );
# Idem, el tiempo que se tardará en realizarlo
print $metro->route({MinStops => 1, Time => 1}, 7.16, 3.5 );
# Informe completo: tabla con las paradas y tiempos
print $metro->route({Report => 1}, 7.16, 3.5);
Naturalmente, es sólo una idea. Algunas cosas son fáciles de hacer, pero
otras son algo más complicadas, como por ejemplo los tiempos, aparte de
que sería sospechoso ir en el metro con un cronómetro en la mano :-)
Lo interesante de este módulo es facilitar el transporte de un punto a
otro, pero en conjunto es como un punto de información. Para mí,
particularmente, sería
A nivel de programación, creo que no habría que hacer mucho, porque lo
más complicado sería lo de calcular el camino más corto, pero para eso
hay módulos que te lo hacen, como el Graph. Naturalmente, el problema
estaría en las excepciones a las reglas (por ejemplo, hay líneas que
cortan a otras más de una vez, hay líneas circulares, etc.)
¿Qué os parece?
¿La idea es muy tonta y una pérdida de tiempo por su inutilidad?
¿La guardo en el APPP (Apartado de Proyectos Personales Pendientes)?
Este fin de semana me quedo en Madrid, así que le miraré un rato... y si
puedo saldré a dar una par de vueltas por el metro :-)
--
JoaquinFerrero.com Linux User #109802
msn/jab explorer en jab.pucela.net GPG/PGP 0x42DDB1FE
skype joaquinferrero phone +34670654075
Más información sobre la lista de distribución Madrid-pm