Questão 46: caminho
Voltar
Considere o seguinte tipo para representar movimentos de um robot.
data Movimento = Norte | Sul | Este | Oeste deriving Show
Defina a função caminho :: (Int,Int) -> (Int,Int) -> [Movimento]
que, dadas as posições inicial e final (coordenadas) do robot, produz uma lista de movimentos suficientes para que o robot passe de uma posição para a outra.
Exemplo
> caminho (0,0) (3,4)
[Este,Este,Este,Norte,Norte,Norte,Norte]
Resolução
data Movimento = Norte | Sul | Este | Oeste
deriving Show
caminho :: (Int, Int) -> (Int, Int) -> [Movimento]
caminho (xi, yi) (xf, yf)
| xi < xf = Este : caminho (xi + 1, yi) (xf, yf)
| xi > xf = Oeste : caminho (xi - 1, yi) (xf, yf)
| yi < yf = Norte : caminho (xi, yi + 1) (xf, yf)
| yi > yf = Sul : caminho (xi, yi - 1) (xf, yf)
| otherwise = []