{"id":5647,"date":"2020-03-05T05:30:13","date_gmt":"2020-03-05T03:30:13","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=5647"},"modified":"2020-03-17T08:21:19","modified_gmt":"2020-03-17T06:21:19","slug":"ordenacion-pendular","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/ordenacion-pendular\/","title":{"rendered":"Ordenaci\u00f3n pendular"},"content":{"rendered":"<p>La ordenaci\u00f3n pendular de una lista xs es la lista obtenida organizando sus elementos de manera similar al movimiento de ida y vuelta de un p\u00e9ndulo; es decir,<\/p>\n<ul>\n<li>El menor elemento de xs se coloca en el centro de la lista.<\/li>\n<li>El siguiente elemento se coloca a la derecha del menor.<\/li>\n<li>El siguiente elemento se coloca a la izquierda del menor y as\u00ed sucesivamente, de una manera similar a la de un p\u00e9ndulo. <\/li>\n<\/ul>\n<p>Por ejemplo, la ordenaci\u00f3n pendular de [6,6,8,5,10] es [10,6,5,6,8].<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   pendulo :: [Int] -> [Int]\n<\/pre>\n<p>tal que (pendulo xs) es la ordenaci\u00f3n pendular de xs. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   pendulo [6,6,8,5,10]                 == [10,6,5,6,8]\n   pendulo [-9,-2,-10,-6]               == [-6,-10,-9,-2]\n   pendulo [11,-16,-18,13,-11,-12,3,18] == [13,3,-12,-18,-16,-11,11,18]\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (sort)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\npendulo :: [Int] -> [Int]\npendulo xs = reverse (impares ys) ++ y : pares ys\n  where (y:ys) = sort xs\n\n-- (pares xs) son los elementos de xs que ocupan posiciones pares.\npares :: [a] -> [a]\npares []     = []\npares (x:xs) = x : impares xs\n\n-- (impares xs) son los elementos de xs que ocupan posiciones impares.\nimpares :: [a] -> [a]\nimpares []     = []\nimpares (_:xs) = pares xs\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\npendulo2 :: [Int] -> [Int]\npendulo2 xs = aux (sort xs) [] True\n  where\n    aux [] ys _         = ys\n    aux (x:xs) ys True  = aux xs (x:ys) False \n    aux (x:xs) ys False = aux xs (ys ++ [x]) True\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> length (pendulo [1..2*10^4])\n--    20000\n--    (0.03 secs, 6,501,896 bytes)\n--    \u03bb> length (pendulo2 [1..2*10^4])\n--    20000\n--    (2.37 secs, 8,596,479,096 bytes)\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\u00abLa mejor obra del matem\u00e1tico es el arte, un arte altamente perfecto, tan audaz como los m\u00e1s secretos sue\u00f1os de la imaginaci\u00f3n, claro y l\u00edmpido. El genio matem\u00e1tico y el genio art\u00edstico se tocan mutuamente.\u00bb <\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/G%C3%B6sta_Mittag-Leffler\">G\u00f6sta Mittag-Leffler<\/a>.\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>La ordenaci\u00f3n pendular de una lista xs es la lista obtenida organizando sus elementos de manera similar al movimiento de ida y vuelta de un p\u00e9ndulo; es decir, El menor elemento de xs se coloca en el centro de la lista. El siguiente elemento se coloca a la derecha del menor. El siguiente elemento se&#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":[6,32,14],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5647"}],"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=5647"}],"version-history":[{"count":5,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5647\/revisions"}],"predecessor-version":[{"id":5694,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5647\/revisions\/5694"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=5647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=5647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=5647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}