{"id":5640,"date":"2020-03-02T05:30:11","date_gmt":"2020-03-02T03:30:11","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=5640"},"modified":"2020-03-09T08:21:02","modified_gmt":"2020-03-09T06:21:02","slug":"pandemia","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/pandemia\/","title":{"rendered":"Pandemia"},"content":{"rendered":"<p>\u00a1El mundo est\u00e1 en cuarentena! Hay una nueva pandemia que lucha contra la humanidad. Cada continente est\u00e1 aislado de los dem\u00e1s, pero las personas infectadas se han propagado antes de la advertencia.<\/p>\n<p>En este problema se representar\u00e1 el mundo por una cadena como la siguiente<\/p>\n<pre lang=\"text\">\n   \"01000000X000X011X0X\"\n<\/pre>\n<p>donde 0 representa no infectado, 1 representa infectado y X representa un oc\u00e9ano<\/p>\n<p>Las reglas de propagaci\u00f3n son:<\/p>\n<ul>\n<li>El virus no puede propagarse al otro lado de un oc\u00e9ano.<\/li>\n<li>Si una persona se infecta, todas las personas de este continente se infectan tambi\u00e9n. <\/li>\n<li>El primer y el \u00faltimo continente no est\u00e1n conectados.<\/li>\n<\/ul>\n<p>El problema consiste en encontrar el porcentaje de la poblaci\u00f3n humana que se infect\u00f3 al final. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   inicio:     \"01000000X000X011X0X\"\n   final:      \"11111111X000X111X0X\"\n   total:      15\n   infectados: 11\n   porcentaje: 100*11\/15 = 73.33333333333333\n<\/pre>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   porcentajeInfectados :: String -> Double\n<\/pre>\n<p>tal que (porcentajeInfectados xs) es el porcentaje final de infectados para el mapa inicial xs. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   porcentajeInfectados \"01000000X000X011X0X\"  == 73.33333333333333\n   porcentajeInfectados \"01X000X010X011XX\"     == 72.72727272727273\n   porcentajeInfectados \"XXXXX\"                == 0.0\n   porcentajeInfectados \"0000000010\"           == 100.0\n   porcentajeInfectados \"X00X000000X10X0100\"   == 42.857142857142854\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericLength)\nimport Data.List.Split (splitOn)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nporcentajeInfectados :: String -> Double\nporcentajeInfectados xs\n  | nh == 0   = 0\n  | otherwise = 100 * ni \/ nh\n  where ni = fromIntegral (numeroInfectados xs)\n        nh = fromIntegral (numeroHabitantes xs)\n\n-- (continentes xs) es la lista de las poblaciones de los continentes\n-- del mapa xs. Por ejemplo,\n--    continentes \"01000000X000X011X0X\" == [\"01000000\",\"000\",\"011\",\"0\"]\n--    continentes \"01X000X010X011XX\"    == [\"01\",\"000\",\"010\",\"011\"]\n--    continentes \"XXXXX\"               == [\"\"]\n--    continentes \"0000000010\"          == [\"0000000010\"]\n--    continentes \"X00X000000X10X0100\"  == [\"\",\"00\",\"000000\",\"10\",\"0100\"]\ncontinentes :: String -> [String]\ncontinentes [] = []\ncontinentes xs = as : continentes (dropWhile (=='X') bs)\n  where (as,bs) = break (=='X') xs\n\n-- (numeroInfectados xs) es el n\u00famero final de infectados a partir del\n-- mapa xs. Por ejemplo,\n--    numeroInfectados \"01000000X000X011X0X\"  ==  11\nnumeroInfectados :: String -> Int\nnumeroInfectados xs =\n  sum [length ys | ys <- continentes xs\n                 , '1' `elem` ys]\n  \n-- (numeroHabitantes xs) es el n\u00famero final de habitantes del mapa\n-- xs. Por ejemplo, \n--    numeroHabitantes \"01000000X000X011X0X\"  ==  15\nnumeroHabitantes :: String -> Int\nnumeroHabitantes xs = length (filter (\/='X') xs)\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nporcentajeInfectados2 :: String -> Double\nporcentajeInfectados2 xs\n  | nh == 0   = 0\n  | otherwise = 100 * ni \/ nh\n  where ni = sum [genericLength ys | ys <- splitOn \"X\" xs, '1' `elem` ys]\n        nh = genericLength (filter (\/='X') xs)\n<\/pre>\n<h4>Otras soluciones<\/h4>\n<ul>\n<li>Se pueden escribir otras soluciones en los comentarios.\n<li>El c\u00f3digo se debe escribir entre una l\u00ednea con &#60;pre lang=&quot;haskell&quot;&#62; y otra con &#60;\/pre&#62;\n<\/ul>\n<h4>Pensamiento<\/h4>\n<blockquote><p>\n\"El avance de las matem\u00e1ticas puede ser visto como un progreso de lo infinito a lo finito.\" <\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Gian-Carlo_Rota\">Gian-Carlo Rota<\/a>.\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\u00a1El mundo est\u00e1 en cuarentena! Hay una nueva pandemia que lucha contra la humanidad. Cada continente est\u00e1 aislado de los dem\u00e1s, pero las personas infectadas se han propagado antes de la advertencia. En este problema se representar\u00e1 el mundo por una cadena como la siguiente \u00ab01000000X000X011X0X\u00bb donde 0 representa no infectado, 1 representa infectado y&#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":[61,8,59,26,38,183,258,28,11,140,40],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5640"}],"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=5640"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5640\/revisions"}],"predecessor-version":[{"id":5668,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5640\/revisions\/5668"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=5640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=5640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=5640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}