{"id":4835,"date":"2019-03-18T06:00:16","date_gmt":"2019-03-18T04:00:16","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=4835"},"modified":"2019-03-25T07:43:31","modified_gmt":"2019-03-25T05:43:31","slug":"permutacion-de-elementos-consecutivos-2","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/permutacion-de-elementos-consecutivos-2\/","title":{"rendered":"Permutaci\u00f3n de elementos consecutivos"},"content":{"rendered":"<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\"> \n   permutaConsecutivos :: [a] -> [a]\n<\/pre>\n<p>tal que (permutaConsecutivos xs) es la lista obtenida permutando los elementos consecutivos de xs. Por ejemplo,<\/p>\n<pre lang=\"text\"> \n   permutaConsecutivos [1..8]         ==  [2,1,4,3,6,5,8,7]\n   permutaConsecutivos [1..9]         ==  [2,1,4,3,6,5,8,7,9]\n   permutaConsecutivos \"simplemente\"  ==  \"ispmelemtne\"\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.Array\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\npermutaConsecutivos :: [a] -> [a]\npermutaConsecutivos (x:y:zs) = y : x : permutaConsecutivos zs\npermutaConsecutivos xs       = xs\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\npermutaConsecutivos2 :: [a] -> [a]\npermutaConsecutivos2 xs \n  | even n    = elems (array (1,n) [(i,f i) | i <- [1..n]])\n  | otherwise = elems (array (1,n) ((n,v!n) : [(i,f i) | i <- [1..n-1]]))\n  where\n    n = length xs\n    v = listArray (1,n) xs\n    f i | even i =    v ! (i - 1)\n        | otherwise = v ! (i + 1)\n    \n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> length (permutaConsecutivos [1..(3*10^6)])\n--    3000000\n--    (2.21 secs, 504,102,648 bytes)\n--    \u03bb> length (permutaConsecutivos2 [1..(3*10^6)])\n--    3000000\n--    (6.18 secs, 1,248,127,688 bytes)\n<\/pre>\n<h4>Pensamiento<\/h4>\n<blockquote><p>\nEntre el vivir y el so\u00f1ar<br \/>\nhay una tercera cosa.<br \/>\nAdiv\u00ednala.<\/p>\n<p>Antonio Machado\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Definir la funci\u00f3n permutaConsecutivos :: [a] -> [a] tal que (permutaConsecutivos xs) es la lista obtenida permutando los elementos consecutivos de xs. Por ejemplo, permutaConsecutivos [1..8] == [2,1,4,3,6,5,8,7] permutaConsecutivos [1..9] == [2,1,4,3,6,5,8,7,9] permutaConsecutivos \u00absimplemente\u00bb == \u00abispmelemtne\u00bb Soluciones import Data.Array &#8212; 1\u00aa soluci\u00f3n &#8212; =========== permutaConsecutivos :: [a] -> [a] permutaConsecutivos (x:y:zs) = y : x&#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":[5],"tags":[6],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4835"}],"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=4835"}],"version-history":[{"count":5,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4835\/revisions"}],"predecessor-version":[{"id":4869,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4835\/revisions\/4869"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=4835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=4835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=4835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}