{"id":3121,"date":"2017-03-22T06:00:42","date_gmt":"2017-03-22T04:00:42","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3121"},"modified":"2021-04-25T16:13:05","modified_gmt":"2021-04-25T14:13:05","slug":"representacion-de-conjuntos-mediante-intervalos-2017","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/representacion-de-conjuntos-mediante-intervalos-2017\/","title":{"rendered":"Representaci\u00f3n de conjuntos mediante intervalos"},"content":{"rendered":"<p>Un conjunto de n\u00fameros enteros se pueden representar mediante una lista ordenada de intervalos tales que la diferencia entre el menor elemento de un intervalo y el mayor elemento de su intervalo anterior es mayor que uno.<\/p>\n<p>Por ejemplo, el conjunto {2, 7, 4, 3, 9, 6} se puede representar mediante la lista de intervalos [(2,4),(6,7),(9,9)] de forma que en el primer intervalo se agrupan los n\u00fameros 2, 3 y 4; en el segundo, los n\u00fameros 6 y 7 y el tercero, el n\u00famero 9.<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   intervalos :: [Int] -> [(Int,Int)]\n<\/pre>\n<p>tal que (intervalos xs) es lista ordenada de intervalos que representa al conjunto xs. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   intervalos [2,7,4,3,9,6]  ==  [(2,4),(6,7),(9,9)]\n<\/pre>\n<p><strong>Nota<\/strong>: Este ejercicio est\u00e1 basado en el problema <a href=\"https:\/\/open.kattis.com\/problems\/busnumbers\">Bus numbers<\/a> de <a href=\"https:\/\/open.kattis.com\">Kattis<\/a><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (sort)\n\nintervalos :: [Int] -> [(Int,Int)]\nintervalos = map intervalo . segmentos\n\n-- (segmentos xs) es la lista de segmentos formados por elementos\n-- consecutivos de xs. Por ejemplo,\n--    segmentos [2,7,4,3,9,6]  ==  [[2,3,4],[6,7],[9]]\nsegmentos :: [Int] -> [[Int]]\nsegmentos xs = aux as [[a]]\n  where aux [] zs = zs\n        aux (y:ys) ((a:as):zs) | y == a-1  = aux ys ((y:a:as):zs)\n                               | otherwise = aux ys ([y]:(a:as):zs)\n        (a:as) = reverse (sort xs)\n\n-- (intervalo xs) es el intervalo correspondiente al segmento xs. Por\n-- ejemplo, \n--    intervalo [2,3,4]  ==  (2,4)\n--    intervalo [6,7]    ==  (6,7)\n--    intervalo [9]      ==  (9,9)\nintervalo :: [Int] -> (Int,Int)\nintervalo xs = (head xs, last xs)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Un conjunto de n\u00fameros enteros se pueden representar mediante una lista ordenada de intervalos tales que la diferencia entre el menor elemento de un intervalo y el mayor elemento de su intervalo anterior es mayor que uno. Por ejemplo, el conjunto {2, 7, 4, 3, 9, 6} se puede representar mediante la lista de intervalos&#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":[71,134,10,11,6],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3121"}],"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=3121"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3121\/revisions"}],"predecessor-version":[{"id":3151,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3121\/revisions\/3151"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}