Menu Close

Matriz girada 180 grados

Definir la función

   matrizGirada180 :: Matrix a -> Matrix a

tal que (matrizGirada180 p) es la matriz obtenida girando 180 grados la matriz p. Por ejemplo,

   λ> fromList 4 3 [1..]
   (  1  2  3 )
   (  4  5  6 )
   (  7  8  9 )
   ( 10 11 12 )
 
   λ> matrizGirada180 (fromList 4 3 [1..])
   ( 12 11 10 )
   (  9  8  7 )
   (  6  5  4 )
   (  3  2  1 )
 
   λ> fromList 3 4 [1..]
   (  1  2  3  4 )
   (  5  6  7  8 )
   (  9 10 11 12 )
 
   λ> matrizGirada180 (fromList 3 4 [1..])
   ( 12 11 10  9 )
   (  8  7  6  5 )
   (  4  3  2  1 )

Soluciones

import Data.Matrix ( Matrix
                   , (!)
                   , fromList
                   , fromLists
                   , matrix
                   , ncols
                   , nrows
                   , toLists
                   )
 
-- 1ª solución
matrizGirada180 :: Matrix a -> Matrix a
matrizGirada180 p = matrix m n f
  where m       = nrows p
        n       = ncols p
        f (i,j) = p!(m-i+1,n-j+1)
 
-- 2ª solución
matrizGirada180b :: Matrix a -> Matrix a
matrizGirada180b p =
  fromLists (reverse (map reverse (toLists p)))
 
-- 3ª solución
matrizGirada180c :: Matrix a -> Matrix a
matrizGirada180c =
  fromLists . reverse . map reverse . toLists

Pensamiento

Bueno es recordar
las palabras viejas
que han de volver a sonar.

Antonio Machado

5 soluciones de “Matriz girada 180 grados

  1. frahidzam
    import Data.Matrix
     
    matrizGirada180 :: Matrix a -> Matrix a
    matrizGirada180 m = matrix a b f
      where (a,b) = (nrows m, ncols m)
            f (i,j) = m ! (a-i+1,b-j+1)
  2. frahidzam

    Solución en Python.

    import numpy as np
     
    def matrizGirada180 (m):
      return np.rot90 (np.rot90 (m))
  3. adogargon
    import Data.Matrix
     
    matrizGirada180 :: Matrix a -> Matrix a
    matrizGirada180 = fromLists . reverse . map reverse . toLists
  4. javmarcha1
    import Data.Matrix
     
    matrizGirada180 :: Matrix a -> Matrix a
    matrizGirada180 m = fromLists (reverse (map reverse (toLists m)))
  5. luipromor
    import Data.Matrix
     
    matrizGirada180 :: Matrix a -> Matrix a
    matrizGirada180 h = aux ((fromLists . map reverse . toLists) h)
      where aux c = f c (nrows c) 1
            f v n x | div n 2 == x = switchRows x (n-x+1) v
                    | otherwise    = f (switchRows x (n-x+1) v) n (x+1)
     
    matrizGirada180' :: Matrix a -> Matrix a
    matrizGirada180' h = aux ((fromLists . reverse . toLists) h)
      where aux c = f c (ncols c) 1
            f v n x | div n 2 == x = switchCols x (n-x+1) v
                    | otherwise    = f (switchCols x (n-x+1) v) n (x+1)

Escribe tu solución

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.