Diagonales invertidas
Definir la función
1 |
diagonalesInvertidas :: Matrix a -> Matrix a |
tal que (diagonalesInvertidas q) es la matriz obtenida invirtiendo el orden de los elementos de la diagonal principal y de la diagonal secundaria de q. Por ejemplo,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
λ> fromList 5 5 [1..] ┌ ┐ │ 1 2 3 4 5 │ │ 6 7 8 9 10 │ │ 11 12 13 14 15 │ │ 16 17 18 19 20 │ │ 21 22 23 24 25 │ └ ┘ λ> diagonalesInvertidas (fromList 5 5 [1..]) ┌ ┐ │ 25 2 3 4 21 │ │ 6 19 8 17 10 │ │ 11 12 13 14 15 │ │ 16 9 18 7 20 │ │ 5 22 23 24 1 │ └ ┘ λ> fromList 3 3 ['a','b'..] ┌ ┐ │ 'a' 'b' 'c' │ │ 'd' 'e' 'f' │ │ 'g' 'h' 'i' │ └ ┘ λ> diagonalesInvertidas (fromList 3 3 ['a','b'..]) ┌ ┐ │ 'i' 'b' 'g' │ │ 'd' 'e' 'f' │ │ 'c' 'h' 'a' │ └ ┘ |
1 2 3 4 5 6 7 8 |
import Data.Matrix diagonalesInvertidas :: Matrix a -> Matrix a diagonalesInvertidas q = matrix n n f where n = nrows q f (i,j) | i == j = q ! (n + 1 - i, n + 1 - i) | i+j == n+1 = q ! (j,i) | otherwise = q ! (i,j) |
Otras soluciones
- Se pueden escribir otras soluciones en los comentarios.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
Soluciones
Pensamiento
«No estamos muy contentos cuando nos vemos obligados a aceptar una verdad matemática en virtud de una complicada cadena de conclusiones formales y cálculos, que atravesamos a ciegas, eslabón por eslabón, sintiendo nuestro camino por el tacto. Queremos primero una visión general del objetivo y del camino; queremos entender la idea de la prueba, el contexto más profundo.»
Un comentario