Visibilidad de listas y matrices
La visibilidad de una lista es el número de elementos que son estrictamente mayores que todos los anteriores. Por ejemplo, la visibilidad de la lista [1,2,5,2,3,6] es 4.
La visibilidad de una matriz P es el par formado por las visibilidades de las filas de P y las visibilidades de las columnas de P. Por ejemplo, dada la matriz
1 2 3 |
( 4 2 1 ) Q = ( 3 2 5 ) ( 6 1 8 ) |
la visibilidad de Q es ([1,2,2],[2,1,3]).
Definir las funciones
1 2 |
visibilidadLista :: [Int] -> Int visibilidadMatriz :: Matrix Int -> ([Int],[Int]) |
tales que
- (visibilidadLista xs) es la visibilidad de la lista xs. Por ejemplo,
1 2 |
visibilidadLista [1,2,5,2,3,6] == 4 visibilidadLista [0,-2,5,1,6,6] == 3 |
- (visibilidadMatriz p) es la visibilidad de la matriz p. Por ejemplo,
1 2 3 4 |
ghci> visibilidadMatriz (fromLists [[4,2,1],[3,2,5],[6,1,8]]) ([1,2,2],[2,1,3]) ghci> visibilidadMatriz (fromLists [[0,2,1],[0,2,5],[6,1,8]]) ([2,3,2],[2,1,3]) |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import Data.List (inits) import Data.Matrix (Matrix, (!), nrows, ncols, fromLists) visibilidadLista :: [Int] -> Int visibilidadLista xs = length [x | (ys,x) <- zip (inits xs) xs, all (<x) ys] visibilidadMatriz :: Matrix Int -> ([Int],[Int]) visibilidadMatriz p = ([visibilidadLista [p ! (i,j) | j <- [1..n]] | i <- [1..m]], [visibilidadLista [p ! (i,j) | i <- [1..m]] | j <- [1..n]]) where m = nrows p n = ncols p |
3 Comentarios