Red de Metro
A continuación muestro el enunciado de un ejercicio práctico bastante útil para practicar CAML, consiste en lo siguiente:
Se dispone de una red de metro con las siguientes líneas bidireccionales:
La Red de Metro se codifica como una lista de tuplas cuyo primer elemento es el número de la línea y el segundo elemento es la lista formada por las estaciones de la línea, en concreto para el ejemplo:
[(1,["Est_A";"Est_D";"Est_G";"Est_J";"Est_L";"Est_N";"Est_R"]);
(2,["Est_B";"Est_E";"Est_J";"Est_M";"Est_0"]);
(3,["Est_C";"Est_F";"Est_E";"Est_G";;"Est_K";"Est_M";"Est_P"]);
(4,["Est_I";"Est_H";"Est_L";"Est_Q"])]
Se pide codificar una función en CAML que a partir de la red de metro, una estación de origen y una estación de destino, muestre todos los trayectos directos entre ambas, sin efectuar transbordos.
Para cada línea en la red de metro, se debe mostrar el par (número de línea, lista de estaciones que forman el trayecto incluyendo el origen y el destino). Si en una determinada línea no hay trayecto posible, se devuelve una lista vacía. Dentro de una línea, puede ocurrir que la estación de destino se encuentre antes o después que la estación de origen. En cualquier caso, las estaciones que componen el trayecto deben aparecer en el orden correcto.
La función pedida sigue el siguiente algoritmo: Buscar en todas las líneas de la Red de Metro las estaciones comprendidas entre la estación de origen y la estación de destino. Considérese que para calcular la lista de estaciones de una línea comprendidas entre la estación de origen y la de destino es conveniente apoyarse en la definición de dos funciones:
-
La primera devolverá la lista de las estaciones de la línea desde la estación de origen hasta el final de la lista pasada como argumento.
-
La segunda devolverá la lista de las estaciones comprendidas desde el principio de la lista pasada como argumento hasta la estación de destino.
Seguramente serán necesarias funciones como Concatenar o Invertir.
A continuación se muestran una serie de ejemplos:# RedMetro([(1,["Est_A";"Est_D";"Est_G";"Est_J";"Est_L";"Est_N";"Est_R"]); |
|
Para obtener un fichero con el código haga clic aquí.
El enunciados (sin la solución) en formato pdf está aquí.