{"id":3481,"date":"2017-12-06T06:00:00","date_gmt":"2017-12-06T04:00:00","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3481"},"modified":"2017-12-13T07:07:06","modified_gmt":"2017-12-13T05:07:06","slug":"maximo-de-las-rotaciones-restringidas","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/maximo-de-las-rotaciones-restringidas\/","title":{"rendered":"M\u00e1ximo de las rotaciones restringidas"},"content":{"rendered":"<p>Rotar un n\u00famero a la iquierda significa pasar su primer d\u00edgito al final. Por ejemplo, rotando a la izquierda el 56789 se obtiene 67895.<\/p>\n<p>Las rotaciones restringidas del n\u00famero 56789 se obtienen como se indica a continuci\u00f3n:<\/p>\n<ul>\n<li>Se inicia con el propio n\u00famero: 56789 <\/li>\n<li>El anterior se rota a la izquierda y se obtiene el 67895.<\/li>\n<li>Del anterior se fija el primer d\u00edgito y se rota a la iquierda los otros. Se obtiene 68957.<\/li>\n<li>Del anterior se fijan los 2 primeros d\u00edgito y se rota a la iquierda los otros. Se obtiene 68579.<\/li>\n<li>Del anterior se fijan los 3 primeros d\u00edgito y se rota a la iquierda los otros. Se obtiene 68597.<\/li>\n<\/ul>\n<p>El proceso ha terminado ya que conservando los cuatro primeros queda s\u00f3lo un d\u00edgito que al girar es \u00e9l mismo. Por tanto, la sucesi\u00f3n de las rotaciones restringidas de 56789 es<\/p>\n<pre lang=\"text\">\n   56789 -> 67895 -> 68957 -> 68579 -> 68597\n<\/pre>\n<p>y su mayor elemento es 68957.<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   maxRotaciones :: Integer -> Integer\n<\/pre>\n<p>tal que (maxRotaciones n) es el m\u00e1ximo de las rotaciones restringidas del n\u00famero n. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   maxRotaciones 56789       ==  68957\n   maxRotaciones 1347902468  ==  3790246814\n   maxRotaciones 6           ==  6\n   maxRotaciones 2017        ==  2017\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nmaxRotaciones :: Integer -> Integer\nmaxRotaciones = read . aux . show\n  where aux n@[_]        = n\n        aux n@(x1:x2:xs) = max n (x2:aux (xs ++ [x1]))\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nmaxRotaciones2 :: Integer -> Integer\nmaxRotaciones2 n\n  | n < 10    = n\n  | otherwise = maximum [ read (us ++ vs)\n                        | (us,vs) <- take m (iterate siguiente (\"\",xs)) ]\n  where xs = show n\n        m  = length xs\n\n-- siguiente (\"\",\"56789\")  ==  (\"6\",\"7895\")\n-- siguiente (\"6\",\"7895\")  ==  (\"68\",\"957\")\n-- siguiente (\"68\",\"957\")  ==  (\"685\",\"79\")\n-- siguiente (\"685\",\"79\")  ==  (\"6859\",\"7\")\n-- siguiente (\"6859\",\"7\")  ==  (\"6859\",\"7\")\nsiguiente :: (String,String) -> (String,String)\nsiguiente (xs,a:b:ys) = (xs ++ [b], ys ++ [a])\nsiguiente (xs,[a])    = (xs,[a])\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nmaxRotaciones3 :: Integer -> Integer\nmaxRotaciones3 = read . aux . show\n  where aux (x:y:xs) | x > y     = x : y : xs\n                     | otherwise = y : (aux $ xs ++ [x])\n        aux [x]                  = [x]\n        aux _                    = []\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n--    \u03bb> length (show (maxRotaciones (n (5*10^3))))\n--    5001\n--    (2.74 secs, 802,282,616 bytes)\n--    \u03bb> length (show (maxRotaciones2 (n (5*10^3))))\n--    5001\n--    (18.23 secs, 12,375,579,216 bytes)\n--    \u03bb> length (show (maxRotaciones3 (n (5*10^3))))\n--    5001\n--    (0.67 secs, 729,155,056 bytes)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Rotar un n\u00famero a la iquierda significa pasar su primer d\u00edgito al final. Por ejemplo, rotando a la izquierda el 56789 se obtiene 67895. Las rotaciones restringidas del n\u00famero 56789 se obtienen como se indica a continuci\u00f3n: Se inicia con el propio n\u00famero: 56789 El anterior se rota a la izquierda y se obtiene el&#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,50,28,83,15,11,95,6,33,47],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3481"}],"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=3481"}],"version-history":[{"count":7,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3481\/revisions"}],"predecessor-version":[{"id":3529,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3481\/revisions\/3529"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}