{"id":5730,"date":"2020-03-25T08:24:11","date_gmt":"2020-03-25T06:24:11","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=5730"},"modified":"2020-04-01T08:08:41","modified_gmt":"2020-04-01T06:08:41","slug":"suma-de-intervalos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/suma-de-intervalos\/","title":{"rendered":"Suma de intervalos"},"content":{"rendered":"<p>Los intervalos se pueden representar por pares de enteros (a,b) con a &lt; b. Los elementos del intervalo (2,5) son 2, 3, 4 y 5; por tanto, su longitud es 4. Para calcular la suma de los longitudes de una lista de intervalos hay que tener en cuenta que si hay intervalos superpuestos sus elementos deben de contarse s\u00f3lo una vez. Por ejemplo, la suma de los intervalos de [(1,4),(7,10),(3,5)] es 7 ya que, como los intervalos (1,4) y (3,5) se solapan, los podemos ver como el intervalo (1,5) que tiene una longitud de 4.<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   sumaIntervalos :: [(Int, Int)] -> Int\n<\/pre>\n<p>tal que (sumaIntervalos xs) es la suma de las longitudes de los intervalos de xs contando los superpuestos s\u00f3lo una vez. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   sumaIntervalos [(1, 5)]                  == 4\n   sumaIntervalos [(0,1), (-1,0)]           == 2\n   sumaIntervalos [(0,1), (0,2), (1,2)]     == 2     \n   sumaIntervalos [(1, 5), (6, 10)]         == 8\n   sumaIntervalos [(1, 5), (5, 10)]         == 9\n   sumaIntervalos [(1, 5), (1, 5)]          == 4\n   sumaIntervalos [(1, 4), (7, 10), (3, 5)] == 7\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (nub, sort)\n\n-- 1\u00aa soluci\u00f3n\nsumaIntervalos :: [(Int, Int)] -> Int\nsumaIntervalos = aux . sort\n  where aux [] = 0\n        aux [(a,b)] = b - a\n        aux ((a,b):(c,d):xs) | b < c     = b - a + aux ((c,d):xs)\n                             | otherwise = aux ((a,max b d):xs)\n\n-- 2\u00aa soluci\u00f3n\nsumaIntervalos2 :: [(Int, Int)] -> Int\nsumaIntervalos2 = length . nub . concatMap f\n  where f (a, b) = [a..b - 1]\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\u00abSi la gente no cree que las matem\u00e1ticas son simples, es s\u00f3lo porque no se dan cuenta de lo complicada que es la vida.\u00bb <\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/John_von_Neumann\">John von Neumann<\/a>.\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Los intervalos se pueden representar por pares de enteros (a,b) con a &lt; b. Los elementos del intervalo (2,5) son 2, 3, 4 y 5; por tanto, su longitud es 4. Para calcular la suma de los longitudes de una lista de intervalos hay que tener en cuenta que si hay intervalos superpuestos sus elementos&#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":[4],"tags":[8,58,28,83,24,6,14],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5730"}],"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=5730"}],"version-history":[{"count":5,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5730\/revisions"}],"predecessor-version":[{"id":5756,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5730\/revisions\/5756"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=5730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=5730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=5730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}