Las matrices se pueden representar por listas de lista. Por ejemplo, la matriz
|1 2 5|
|3 0 7|
|9 1 6|
|6 4 2| |
|1 2 5|
|3 0 7|
|9 1 6|
|6 4 2|
se puede representar por
ej :: [[Int]]
ej = [[1,2,5],
[3,0,7],
[9,1,6],
[6,4,2]] |
ej :: [[Int]]
ej = [[1,2,5],
[3,0,7],
[9,1,6],
[6,4,2]]
Definir la función
ordenaPorFila :: Ord a => [[a]] -> Int -> [[a]] |
ordenaPorFila :: Ord a => [[a]] -> Int -> [[a]]
tal que (ordenaPorFila xss k) es la matriz obtenida ordenando xs por los elementos de la fila k. Por ejemplo,
ordenaPorFila ej 1 == [[2,1,5],[0,3,7],[1,9,6],[4,6,2]]
ordenaPorFila ej 2 == [[2,5,1],[0,7,3],[1,6,9],[4,2,6]]
ordenaPorFila ej 3 == [[5,2,1],[7,0,3],[6,1,9],[2,4,6]] |
ordenaPorFila ej 1 == [[2,1,5],[0,3,7],[1,9,6],[4,6,2]]
ordenaPorFila ej 2 == [[2,5,1],[0,7,3],[1,6,9],[4,2,6]]
ordenaPorFila ej 3 == [[5,2,1],[7,0,3],[6,1,9],[2,4,6]]
Soluciones
import Data.List (sort, transpose)
ej :: [[Int]]
ej = [[1,2,5],
[3,0,7],
[9,1,6],
[6,4,2]]
-- 1ª solución
-- ===========
ordenaPorFila :: Ord a => [[a]] -> Int -> [[a]]
ordenaPorFila xss k =
transpose (ordenaPorColumna (transpose xss) k)
ordenaPorColumna :: Ord a => [[a]] -> Int -> [[a]]
ordenaPorColumna xss k =
map snd (sort [(xs!!k,xs) | xs <- xss])
-- 2ª solución
-- ===========
ordenaPorFila2 :: Ord a => [[a]] -> Int -> [[a]]
ordenaPorFila2 xss k =
[[x | (_,x) <- sort $ zip (xss!!k) xs ] | xs <- xss] |
import Data.List (sort, transpose)
ej :: [[Int]]
ej = [[1,2,5],
[3,0,7],
[9,1,6],
[6,4,2]]
-- 1ª solución
-- ===========
ordenaPorFila :: Ord a => [[a]] -> Int -> [[a]]
ordenaPorFila xss k =
transpose (ordenaPorColumna (transpose xss) k)
ordenaPorColumna :: Ord a => [[a]] -> Int -> [[a]]
ordenaPorColumna xss k =
map snd (sort [(xs!!k,xs) | xs <- xss])
-- 2ª solución
-- ===========
ordenaPorFila2 :: Ord a => [[a]] -> Int -> [[a]]
ordenaPorFila2 xss k =
[[x | (_,x) <- sort $ zip (xss!!k) xs ] | xs <- xss]
Se puede imprimir o compartir con
2 soluciones de “Ordenación por una fila”