Búsqueda de la mina
En este ejercicio, se representa un mapa mediante una lista de listas de la misma longitud donde todos sus elementos son 0 menos uno (que es un 1) que es donde se encuentra la mina. Por ejemplo, en el mapa
1 2 3 |
0 0 0 0 0 0 0 0 0 1 0 0 |
la posición de la mina es (2,1).
Definir la función
1 |
posicionMina :: [[Int]] -> (Int,Int) |
tal que (posicionMina m) es la posición de la mina en el mapa m, Por ejemplo,
1 |
posicionMina [[0,0,0,0],[0,0,0,0],[0,1,0,0]] == (2,1) |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import Data.List (elemIndex) import Data.Array (assocs, listArray) -- 1ª solución posicionMina :: [[Int]] -> (Int,Int) posicionMina xss = (length yss, length ys) where (yss,xs:_) = break (1 `elem`) xss ys = takeWhile (/= 1) xs -- 2ª solución posicionMina2 :: [[Int]] -> (Int,Int) posicionMina2 xss = divMod p (length (head xss)) where Just p = elemIndex 1 (concat xss) -- 3ª solución posicionMina3 :: [[Int]] -> (Int,Int) posicionMina3 xss = (fst . head . filter ((1 ==) . snd) . assocs) a where m = length xss - 1 n = length (head xss) - 1 a = listArray ((0,0),(m,n)) (concat xss) |
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>
Pensamiento
«La vida de un matemático está dominada por una insaciable curiosidad, un deseo que raya en la pasión por resolver los problemas que estudia.»
5 Comentarios