{"id":2198,"date":"2016-03-04T06:00:47","date_gmt":"2016-03-04T04:00:47","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=2198"},"modified":"2021-04-25T16:16:22","modified_gmt":"2021-04-25T14:16:22","slug":"numero-de-islas-rectangulares-de-una-matriz-3","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/numero-de-islas-rectangulares-de-una-matriz-3\/","title":{"rendered":"N\u00famero de islas rectangulares de una matriz"},"content":{"rendered":"<p>En este problema se consideran matrices cuyos elementos son 0 y 1. Los valores 1 aparecen en forma de islas rectangulares separadas por 0 de forma que como m\u00e1ximo las islas son diagonalmente adyacentes. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   ej1, ej2 :: Array (Int,Int) Int\n   ej1 = listArray ((1,1),(6,3))\n                   [0,0,0,\n                    1,1,0,\n                    1,1,0,\n                    0,0,1,\n                    0,0,1,\n                    1,1,0]\n   ej2 = listArray ((1,1),(6,6))\n                   [1,0,0,0,0,0,\n                    1,0,1,1,1,1,\n                    0,0,0,0,0,0,\n                    1,1,1,0,1,1,\n                    1,1,1,0,1,1,\n                    0,0,0,0,1,1]\n<\/pre>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   numeroDeIslas :: Array (Int,Int) Int -> Int\n<\/pre>\n<p>tal que (numeroDeIslas p) es el n\u00famero de islas de la matriz p. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   numeroDeIslas ej1  ==  3\n   numeroDeIslas ej2  ==  4\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.Array\n\ntype Matriz = Array (Int,Int) Int\n\nej1, ej2 :: Array (Int,Int) Int\nej1 = listArray ((1,1),(6,3))\n                [0,0,0,\n                 1,1,0,\n                 1,1,0,\n                 0,0,1,\n                 0,0,1,\n                 1,1,0]\nej2 = listArray ((1,1),(6,6))\n                [1,0,0,0,0,0,\n                 1,0,1,1,1,1,\n                 0,0,0,0,0,0,\n                 1,1,1,0,1,1,\n                 1,1,1,0,1,1,\n                 0,0,0,0,1,1]\n\nnumeroDeIslas :: Array (Int,Int) Int -> Int\nnumeroDeIslas p = \n    length [(i,j) | (i,j) <- indices p, \n                     verticeSuperiorIzquierdo p (i,j)]\n\n-- (verticeSuperiorIzquierdo p (i,j)) se verifica si (i,j) es el\n-- v\u00e9rtice superior izquierdo de algunas de las islas de la matriz p,\n-- Por ejemplo, \n--    ghci> [(i,j) | (i,j) <- indices ej1, verticeSuperiorIzquierdo ej1 (i,j)]\n--    [(2,1),(4,3),(6,1)]\n--    ghci> [(i,j) | (i,j) <- indices ej2, verticeSuperiorIzquierdo ej2 (i,j)]\n--    [(1,1),(2,3),(4,1),(4,5)]\nverticeSuperiorIzquierdo :: Matriz -> (Int,Int) -> Bool\nverticeSuperiorIzquierdo p (i,j) =\n    enLadoSuperior p (i,j) && enLadoIzquierdo p (i,j) \n\n-- (enLadoSuperior p (i,j)) se verifica si (i,j) est\u00e1 en el lado\n-- superior de algunas de las islas de la matriz p, Por ejemplo,\n--    ghci> [(i,j) | (i,j) <- indices ej1, enLadoSuperior ej1 (i,j)]\n--    [(2,1),(2,2),(4,3),(6,1),(6,2)]\n--    ghci> [(i,j) | (i,j) <- indices ej2, enLadoSuperior ej2 (i,j)]\n--    [(1,1),(2,3),(2,4),(2,5),(2,6),(4,1),(4,2),(4,3),(4,5),(4,6)]\nenLadoSuperior :: Matriz -> (Int,Int) -> Bool\nenLadoSuperior p (1,j) = p!(1,j) == 1\nenLadoSuperior p (i,j) = p!(i,j) == 1 && p!(i-1,j) == 0\n\n-- (enLadoIzquierdo p (i,j)) se verifica si (i,j) est\u00e1 en el lado\n-- izquierdo de algunas de las islas de la matriz p, Por ejemplo,\n--    ghci> [(i,j) | (i,j) <- indices ej1, enLadoIzquierdo ej1 (i,j)]\n--    [(2,1),(3,1),(4,3),(5,3),(6,1)]\n--    ghci> [(i,j) | (i,j) <- indices ej2, enLadoIzquierdo ej2 (i,j)]\n--    [(1,1),(2,1),(2,3),(4,1),(4,5),(5,1),(5,5),(6,5)]\nenLadoIzquierdo :: Matriz -> (Int,Int) -> Bool\nenLadoIzquierdo p (i,1) = p!(i,1) == 1\nenLadoIzquierdo p (i,j) = p!(i,j) == 1 && p!(i,j-1) == 0\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nnumeroDeIslas2 :: Array (Int,Int) Int -> Int\nnumeroDeIslas2 p = \n    length [(i,j) | (i,j) <- indices p, \n                    p!(i,j) == 1,\n                    i == 1 || p!(i-1,j) == 0,\n                    j == 1 || p!(i,j-1) == 0]  \n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En este problema se consideran matrices cuyos elementos son 0 y 1. Los valores 1 aparecen en forma de islas rectangulares separadas por 0 de forma que como m\u00e1ximo las islas son diagonalmente adyacentes. Por ejemplo, ej1, ej2 :: Array (Int,Int) Int ej1 = listArray ((1,1),(6,3)) [0,0,0, 1,1,0, 1,1,0, 0,0,1, 0,0,1, 1,1,0] ej2 = listArray&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[7],"tags":[8,82,28,72,42],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2198"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=2198"}],"version-history":[{"count":5,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2198\/revisions"}],"predecessor-version":[{"id":2967,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2198\/revisions\/2967"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=2198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=2198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=2198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}