# Recorrido en ZigZag

El recorrido en ZigZag de una matriz consiste en pasar de la primera fila hasta la última, de izquierda a derecha en las filas impares y de derecha a izquierda en las filas pares, como se indica en la figura.

``` / \ | 1 -> 2 -> 3 | | | | | v | | 4 <- 5 <- 6 | => Recorrido ZigZag: [1,2,3,6,5,4,7,8,9] | | | | v | | 7 -> 8 -> 9 | \ /```

Definir la función

` recorridoZigZag :: Matrix a -> [a]`

tal que (recorridoZigZag m) es la lista con los elementos de la matriz m cuando se recorre esta en ZigZag. Por ejemplo,

``` λ> recorridoZigZag (fromLists [[1,2,3],[4,5,6],[7,8,9]]) [1,2,3,6,5,4,7,8,9] λ> recorridoZigZag (fromLists [[1,2],[3,4],[5,6],[7,8]]) [1,2,4,3,5,6,8,7] λ> recorridoZigZag (fromLists [[1,2,3,4],[5,6,7,8],[9,10,11,12]]) [1,2,3,4,8,7,6,5,9,10,11,12] λ> recorridoZigZag (fromList 5 4 "Cada paso es la meta") "Cadasap o es al meta" λ> recorridoZigZag (fromList 4 5 "Cada paso es la meta") "Cada osapes laatem " λ> recorridoZigZag (fromList 10 2 "Cada paso es la meta") "Caad psao se l ameat" λ> recorridoZigZag (fromList 2 10 "Cada paso es la meta") "Cada paso atem al se"```

#### Soluciones

```import Data.Matrix (Matrix, toLists, fromLists, fromList)   recorridoZigZag :: Matrix a -> [a] recorridoZigZag m = concat [f xs | (f,xs) <- zip (cycle [id,reverse]) (toLists m)]```

## 5 soluciones de “Recorrido en ZigZag”

1. jaibengue
```import Data.Matrix   recorridoZigZag :: Matrix a -> [a] recorridoZigZag = aux.toLists where aux (xs:ys:zss) = xs++(reverse ys)++(aux zss) aux [zss] = zss aux [] = []```
2. Maria Ruiz
```recorridoZigZag :: M.Matrix a -> [a] recorridoZigZag m = concat \$ zipWith id (cycle [id,reverse]) (M.toLists m)```
3. jaiturrod
```  import Data.Matrix   recorridoZigZag :: Matrix a -> [a] recorridoZigZag p = concat([f i | i <- [1..n]]) where n = nrows p m = ncols p f x | odd x = [(p!(x,j)) | j <- [1..m]] | otherwise = reverse([(p!(x,j)) | j <- [1..m]])```
4. esppercab
```  recorridoZigZag m =concat(escoge(toLists m)) where escoge []=[] escoge (y:[])=[y] escoge (x:y:zs)=x:(reverse y):(escoge zs)```
• esppercab

Una definición en la que no se trabaja con matrices realmente pero funciona.

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