Ordenación según una cadena
Dada una lista xs y una cadena cs de la misma longitud, la ordenación de xs según cs consiste en emparejar los elementos de cs con los de xs (de forma que al menor elemento de cs le corresponde el menor de xs, al segundo de cs el segundo de xs, etc.) y ordenar los elementos de xs en el mismo orden que sus correspondientes elementos de cs. Por ejemplo, si xs es [6,4,2] y cs es «CAB» entonces a ‘A’ le corresponde el 2, a ‘B’ el 4 y a ‘C’ el 6; luego la ordenación es [6,2,4].
Definir la función
1 |
ordenacion :: Ord a => [a] -> String -> [a] |
tal que (ordenacion xs ys) es la ordenación de la lista xs según la cadena cs. Por ejemplo,
1 2 3 |
ordenacion [6,4,2] "CAB" == [6,2,4] ordenacion [1,5,3] "ABC" == [1,3,5] ordenacion [1,5,3,7] "ABEC" == [1,3,7,5] |
Soluciones
1 2 3 4 5 6 7 |
import Data.List (sort) import Data.Maybe (fromJust) ordenacion :: Ord a => [a] -> String -> [a] ordenacion xs cs = [fromJust (lookup y diccionario) | y <- cs] where diccionario = zip (sort cs) (sort xs) |