[Madrid-pm] Nuevo módulo

Sebastián Ortega sortega en pegaso.ls.fi.upm.es
Jue Abr 12 13:39:04 PDT 2007


Joaquin Ferrero wrote:
> 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 :-)
>
>   
La idea es muy buena y yo no me preocuparía por las excepciones porque 
los algoritmos de búsqueda de caminos en grafos están preparados para 
todo ese tipo de cosas sin necesidad de hacer chapuzas.

Yo te aplaudiría si te decides a hacerlo.


Más información sobre la lista de distribución Madrid-pm