Recorrido del robot
Los puntos de una retícula se representan mediante pares de enteros
type Punto = (Int,Int)
y los movimientos de un robot mediante el tipo
data Movimiento = N Int | S Int | E Int | O Int
donde (N x) significa que se mueve x unidades en la dirección norte y análogamente para las restantes direcciones (S es sur, E es este y O es oeste).
Definir la función
posicion :: [Movimiento] -> Punto
tal que (posicion ms) es la posición final de un robot que inicialmente está en el el punto (0,0) y realiza los movimientos ms. Por ejemplo,
posicion [N 3] == (0,3) posicion [N 3, E 5] == (5,3) posicion [N 3, E 5, S 1] == (5,2) posicion [N 3, E 5, S 1, O 4] == (1,2) posicion [N 3, E 5, S 1, O 4, N 3] == (1,5) posicion [N 3, E 5, S 1, O 4, N 3, S 3] == (1,2)
Soluciones
type Punto = (Int,Int) data Movimiento = N Int | S Int | E Int | O Int posicion :: [Movimiento] -> Punto posicion ms = aux ms (0,0) where aux [] p = p aux (N x:ms) (a,b) = aux ms (a,b+x) aux (S x:ms) (a,b) = aux ms (a,b-x) aux (E x:ms) (a,b) = aux ms (a+x,b) aux (O x:ms) (a,b) = aux ms (a-x,b)