{"id":3933,"date":"2018-04-03T06:00:29","date_gmt":"2018-04-03T04:00:29","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3933"},"modified":"2018-04-10T07:23:44","modified_gmt":"2018-04-10T05:23:44","slug":"mayor-numero-obtenido-intercambiando-dos-digitos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/mayor-numero-obtenido-intercambiando-dos-digitos\/","title":{"rendered":"Mayor n\u00famero obtenido intercambiando dos d\u00edgitos"},"content":{"rendered":"<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   maximoIntercambio :: Int -> Int\n<\/pre>\n<p>tal que (maximoIntercambio x) es el m\u00e1ximo n\u00famero que se puede obtener intercambiando dos d\u00edgitos de x. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   maximoIntercambio 983562  ==  986532\n   maximoIntercambio 31524   ==  51324\n   maximoIntercambio 897     ==  987\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.Array\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nmaximoIntercambio :: Int -> Int\nmaximoIntercambio = maximum . intercambios\n\n-- (intercambios x) es la lista de los n\u00fameros obtenidos intercambiando\n-- dos d\u00edgitos de x. Por ejemplo,\n--    intercambios 1234  ==  [2134,3214,4231,1324,1432,1243]\nintercambios :: Int -> [Int]\nintercambios x = [intercambio i j x | i <- [0..n-2], j <- [i+1..n-1]]\n    where n = length (show x)\n\n-- (intercambio i j x) es el n\u00famero obtenido intercambiando las cifras\n-- que ocupan las posiciones i y j (empezando a contar en cero) del\n-- n\u00famero x. Por ejemplo,\n--    intercambio 2 5 123456789  ==  126453789\nintercambio :: Int -> Int -> Int -> Int\nintercambio i j x = read (concat [as,[d],cs,[b],ds])\n    where xs        = show x\n          (as,b:bs) = splitAt i xs \n          (cs,d:ds) = splitAt (j-i-1) bs\n\n-- 2\u00aa soluci\u00f3n (con vectores)\n-- ==========================\n\nmaximoIntercambio2 :: Int -> Int\nmaximoIntercambio2 = read . elems . maximum . intercambios2\n\n-- (intercambios2 x) es la lista de los vectores obtenidos\n-- intercambiando dos elementos del vector de d\u00edgitos de x. Por ejemplo, \n--    ghci> intercambios2 1234\n--    [array (0,3) [(0,'2'),(1,'1'),(2,'3'),(3,'4')],\n--     array (0,3) [(0,'3'),(1,'2'),(2,'1'),(3,'4')],\n--     array (0,3) [(0,'4'),(1,'2'),(2,'3'),(3,'1')],\n--     array (0,3) [(0,'1'),(1,'3'),(2,'2'),(3,'4')],\n--     array (0,3) [(0,'1'),(1,'4'),(2,'3'),(3,'2')],\n--     array (0,3) [(0,'1'),(1,'2'),(2,'4'),(3,'3')]]\nintercambios2 :: Int -> [Array Int Char]\nintercambios2 x = [intercambioV i j v | i <- [0..n-2], j <- [i+1..n-1]]\n    where xs = show x\n          n  = length xs\n          v  = listArray (0,n-1) xs\n\n-- (intercambioV i j v) es el vector obtenido intercambiando los\n-- elementos de v que ocupan las posiciones i y j. Por ejemplo,\n--    ghci> intercambioV 2 4 (listArray (0,4) [3..8])\n--    array (0,4) [(0,3),(1,4),(2,7),(3,6),(4,5)]\nintercambioV :: Int -> Int -> Array Int a -> Array Int a\nintercambioV i j v = v \/\/ [(i,v!j),(j,v!i)]\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Definir la funci\u00f3n maximoIntercambio :: Int -> Int tal que (maximoIntercambio x) es el m\u00e1ximo n\u00famero que se puede obtener intercambiando dos d\u00edgitos de x. Por ejemplo, maximoIntercambio 983562 == 986532 maximoIntercambio 31524 == 51324 maximoIntercambio 897 == 987 Soluciones import Data.Array &#8212; 1\u00aa soluci\u00f3n &#8212; =========== maximoIntercambio :: Int -> Int maximoIntercambio = maximum&#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,12,245,28,72,15,95,33,73],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3933"}],"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=3933"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3933\/revisions"}],"predecessor-version":[{"id":3970,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3933\/revisions\/3970"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}