Coste del recorrido ordenado
El coste de visitar los elementos de la lista [4,3,2,5,1] de manera creciente empezando en el primer elemento y siendo el coste de dada paso el valor absoluto de la diferencia de las posiciones se calcula de la siguiente manera
- Coste de 4 a 1 = |0-4| = 4
- Coste de 1 a 2 = |4-2| = 2
- Coste de 2 a 3 = |2-1| = 1
- Coste de 3 a 4 = |1-0| = 1
- Coste de 4 a 5 = |0-3| = 3
Por tanto, el coste del recorrido es 4+2+1+1+3 = 11.
Definir la función coste :: Ord a => [a] -> Int tal que (coste xs) es el coste de visitar los elementos de xs de manera creciente empezando en el primer elemento y siendo el coste de dada paso el valor absoluto de la diferencia de las posiciones (se supone que los elementos de xs son distintos). Por ejemplo,
1 2 |
coste [4,3,2,5,1] == 11 coste "betis" == 6 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import Data.List (sort) coste :: Ord a => [a] -> Int coste xs = sum [abs (i-j) | (i,j) <- zip aux (tail aux)] where aux = recorrido xs -- (recorrido xs) esla lista de las posiciones al visitar los elementos -- de xs de manera creciente empezando en el primer elemento. Por -- ejemplo, -- recorrido [4,3,2,5,1] == [0,4,2,1,0,3] recorrido :: Ord a => [a] -> [Int] recorrido xs = 0 : map snd (sort (zip xs [0..])) |
Nuevas soluciones
- En los comentarios se pueden escribir nuevas soluciones.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
7 Comentarios