{"id":2848,"date":"2017-01-24T06:00:59","date_gmt":"2017-01-24T04:00:59","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=2848"},"modified":"2017-01-31T06:36:40","modified_gmt":"2017-01-31T04:36:40","slug":"la-sucesion-mira-y-di","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/la-sucesion-mira-y-di\/","title":{"rendered":"La sucesi\u00f3n \u00abMira y di\u00bb"},"content":{"rendered":"<p>La sucesi\u00f3n \u00abMira y di\u00bb (en ingl\u00e9s, <a href=\"http:\/\/bit.ly\/2kfLrqy\">Look-and-Say<\/a>) es una sucesi\u00f3n de n\u00fameros naturales en donde cada t\u00e9rmino se obtiene agrupando las cifras iguales del anterior y recit\u00e1ndolas. Por ejemplo, si x(0) = 1 se lee como \u00abun uno\u00bb y por tanto x(1) = 11. An\u00e1logamente,<\/p>\n<pre lang=\"text\"> \n   x(1) = 11     (\"dos unos                          --> \"21\")\n   x(2) = 21     (\"un dos un uno                     --> \"1211\")\n   x(3) = 1211   (\"un uno un dos dos unos            --> \"111221\")\n   x(4) = 111221 (\"tres unos dos doses un uno        --> \"312211\")\n   x(5) = 312211 (\"un tres un uno dos doses dos unos --> \"13112221\")\n<\/pre>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\"> \n\u200b\u200b\u200b  \u200bsucMiraYDi :: Integer -> [Integer]\n<\/pre>\n<p>tal que (sucMiraYDi n) es la sucesi\u00f3n \u00abMira y di\u00bb cuyo primer t\u00e9rmino es n. Por ejemplo,<\/p>\n<pre lang=\"text\"> \n   \u03bb> take 9 (sucMiraYdi 1)\n   [1,11,21,1211,111221,312211,13112221,1113213211,31131211131221]\n   \u03bb> take 5 (sucMiraYdi 2017)\n   [2017,12101117,111211103117,31123110132117,1321121321101113122117]\n   \u03bb> take 7 (sucMiraYDi 22)\n   [22,22,22,22,22,22,22]\n   \u03bb> (sucMiraYDi 1) !! 11\n   3113112221232112111312211312113211\n   \u03bb> (sucMiraYDi 1) !! 12\n   1321132132111213122112311311222113111221131221\n<\/pre>\n<p>Independientemente del t\u00e9rmino inicial x(0) elegido (con la \u00fanica salvedad del 22), la sucesi\u00f3n diverge y la raz\u00f3n entre el n\u00famero de cifras de x(n) y el de x(n-1) tiende a un valor fijo que es la <a href=\"http:\/\/bit.ly\/2iTwQ8g\">constante de Conway<\/a> \u03bb \u2248 1.303577269. Por ejemplo, para x(0) = 1, las razones son<\/p>\n<pre lang=\"text\"> \n   2, 1, 2, 1.5, 1, 1.3333333333333333, 1.25, 1.4, 1.4285714285714286, 1.3\n<\/pre>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\"> \n   aproximacionConway :: Integer -> Double -> Int\n<\/pre>\n<p>tal que (aproximacionConway n e) es el menor k tal que la diferencia entre la constante de Conway y la raz\u00f3n entre el n\u00famero de cifras de x(k) x(k-1) es, en valor absoluto, menor que e. Por ejemplo,<\/p>\n<pre lang=\"text\"> \n   aproximacionConway 1 0.3     ==  3\n   aproximacionConway 1 0.1     ==  5\n   aproximacionConway 1 0.01    ==  9\n   aproximacionConway 1 0.001   ==  24\n   aproximacionConway 1 0.0001  ==  43\n   aproximacionConway 2 0.0001  ==  47\n<\/pre>\n<p><strong>Nota<\/strong>: Este ejercicio ha sido propuesto por El\u00edas Guisado.<\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericLength, group)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nsucMiraYdi :: Integer -> [Integer]\nsucMiraYdi = iterate di\n\n-- (di x) es el n\u00famero correspondiente a la lectura de x. Por ejemplo.\n--    di 1       ==  11\n--    di 11      ==  21\n--    di 21      ==  1211\n--    di 1211    ==  111221\n--    di 111221  ==  312211\n--    di 312211  ==  13112221\ndi :: Integer -> Integer\ndi = read . concatMap aux . group . show\n  where aux s = show (length s) ++ [head s]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nsucMiraYdi2 :: Integer -> [Integer]\nsucMiraYdi2 = iterate (read . concatMap aux . group . show)\n  where aux s = show (length s) ++ [head s]\n\n-- Constante de Conway\n-- ===================\n\naproximacionConway :: Integer -> Double -> Int\naproximacionConway n e =\n  length (takeWhile aux (razonesMiraYdi n))\n  where aux x = abs (x - constanteConway) > e \n\nconstanteConway :: Double\nconstanteConway = 1.303577269\n\n-- (razonesMiraYdi n) es la sucesi\u00f3n de las razones entre de cada\n-- elemento de la sucesi\u00f3n \"Mira y di\" con elemento inicial n y su\n-- anterior. Por ejemplo,\n--    \u03bb> take 10 (razonesMiraYdi 1)\n--    [2.0,1.0,2.0,1.5,1.0,1.3333333333333333,1.25,1.4,1.4285714285714286,1.3]\n--    \u03bb> take 7 (razonesMiraYdi 10)\n--    [2.0,1.0,1.5,1.6666666666666667,1.2,1.1666666666666667,1.5714285714285714]\nrazonesMiraYdi :: Integer -> [Double]\nrazonesMiraYdi n =\n  zipWith (\/) (tail xs) xs\n  where xs = map (genericLength . show) (sucMiraYdi n)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>La sucesi\u00f3n \u00abMira y di\u00bb (en ingl\u00e9s, Look-and-Say) es una sucesi\u00f3n de n\u00fameros naturales en donde cada t\u00e9rmino se obtiene agrupando las cifras iguales del anterior y recit\u00e1ndolas. Por ejemplo, si x(0) = 1 se lee como \u00abun uno\u00bb y por tanto x(1) = 11. An\u00e1logamente, x(1) = 11 (\u00abdos unos &#8211;> \u00ab21\u00bb) x(2) =&#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":[58,258,13,71,50,28,11,95,33,45,34,76],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2848"}],"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=2848"}],"version-history":[{"count":5,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2848\/revisions"}],"predecessor-version":[{"id":2881,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2848\/revisions\/2881"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=2848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=2848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=2848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}