{"id":3665,"date":"2018-01-25T06:00:16","date_gmt":"2018-01-25T04:00:16","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3665"},"modified":"2018-02-01T09:20:01","modified_gmt":"2018-02-01T07:20:01","slug":"sucesion-de-lichtenberg","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/sucesion-de-lichtenberg\/","title":{"rendered":"Sucesi\u00f3n de Lichtenberg"},"content":{"rendered":"<p>La sucesi\u00f3n de Lichtenberg esta formada por la representaci\u00f3n decimal de los n\u00fameros binarios de la <a href=\"http:\/\/bit.ly\/2rzGy4l\">sucesi\u00f3n de d\u00edgitos 0 y 1 alternados<\/a> Los primeros t\u00e9rminos de ambas sucesiones son<\/p>\n<pre lang=\"text\">\n   Alternada ..... Lichtenberg\n   0 ....................... 0\n   1 ....................... 1\n   10 ...................... 2\n   101 ..................... 5\n   1010 ................... 10\n   10101 .................. 21\n   101010 ................. 42\n   1010101 ................ 85\n   10101010 .............. 170\n   101010101 ............. 341\n   1010101010 ............ 682\n   10101010101 .......... 1365\n   101010101010 ......... 2730\n<\/pre>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   lichtenberg        :: [Integer]\n   graficaLichtenberg :: Int -> IO ()\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>lichtenberg es la lista cuyos elementos son los t\u00e9rminos de la sucesi\u00f3n de Lichtenberg. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">\n     \u03bb> take 17 lichtenberg\n     [0,1,2,5,10,21,42,85,170,341,682,1365,2730,5461,10922,21845,43690]\n<\/pre>\n<ul>\n<li>(graficaLichtenberg n) dibuja la gr\u00e1fica del n\u00famero de d\u00edgitos de los n primeros t\u00e9rminos de la sucesi\u00f3n de Lichtenberg. Por ejemlo, (graficaLichtenberg 100) dibuja<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/01\/Sucesion_de_Lichtenberg.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/01\/Sucesion_de_Lichtenberg.png?resize=640%2C480\" alt=\"Sucesion_de_Lichtenberg\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-3666\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/01\/Sucesion_de_Lichtenberg.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/01\/Sucesion_de_Lichtenberg.png?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/01\/Sucesion_de_Lichtenberg.png?resize=100%2C75&amp;ssl=1 100w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2018\/01\/Sucesion_de_Lichtenberg.png?resize=150%2C112&amp;ssl=1 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/li>\n<\/ul>\n<p>Comprobar con QuickCheck que todos los t\u00e9rminos de la sucesi\u00f3n de Lichtenberg, a partir del 4\u00ba, son n\u00fameros compuestos.<\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.Char (digitToInt)\nimport Graphics.Gnuplot.Simple\nimport Test.QuickCheck\nimport Data.Numbers.Primes (isPrime)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nlichtenberg1 :: [Integer]\nlichtenberg1 = map binarioAdecimal sucAlternada\n\n-- sucAlternada es la lista cuyos elementos son los t\u00e9rminos de la\n-- sucesi\u00f3n de los d\u00edgitos 0 y 1 alternados. Por ejemplo,\n--    \u03bb> take 7 sucAlternada\n--    [\"0\",\"1\",\"10\",\"101\",\"1010\",\"10101\",\"101010\"]\nsucAlternada :: [String]\nsucAlternada =\n  ['0'] : [take n cadenaAlternada | n <- [1..]]\n\n-- cadenaAltenada es la cadena formada alternando los caracteres 1 y\n-- 0. Por ejemplo,\n--    take 20 cadenaAlternada  ==  \"10101010101010101010\"\ncadenaAlternada :: String\ncadenaAlternada = cycle ['1','0']\n\n-- (binarioAdecimal cs) es el n\u00famero decimal correspondiente al n\u00famero\n-- binario cuya cadena de d\u00edgitos es cs. Por ejemplo,\n--    binarioAdecimal \"11101\"  ==  29\nbinarioAdecimal :: String -> Integer\nbinarioAdecimal =\n  foldl (\\acc x -> acc * 2 + (toInteger . digitToInt) x) 0\n  \n-- 2\u00aa soluci\u00f3n\nlichtenberg2 :: [Integer]\nlichtenberg2 = map a [0..]\n  where a 0 = 0\n        a 1 = 1\n        a n = a (n-1) + 2 * a (n-2) + 1\n\n-- 3\u00aa soluci\u00f3n\nlichtenberg3 :: [Integer]\nlichtenberg3 =\n  0 : 1 : map (+1) (zipWith (+) (tail lichtenberg3) (map (*2) lichtenberg3)) \n\n-- Comprobaci\u00f3n de eficiencia\n--    \u03bb> length (show (lichtenberg1 !! 27))\n--    8\n--    (0.02 secs, 155,384 bytes)\n--    \u03bb> length (show (lichtenberg2 !! 27))\n--    8\n--    (2.22 secs, 311,157,760 bytes)\n--    \n--    \u03bb> length (show (lichtenberg1 !! (8*10^4)))\n--    24083\n--    (1.28 secs, 664,207,040 bytes)\n--    \u03bb> length (show (lichtenberg3 !! (8*10^4)))\n--    24083\n--    (2.59 secs, 1,253,328,200 bytes)\n\n-- La propiedad es\npropLichtenberg :: Int -> Property\npropLichtenberg n =\n  n > 4 ==> not (isPrime (lichtenberg1 !! n))\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck propLichtenberg\n--    +++ OK, passed 100 tests.\n\ngraficaLichtenberg :: Int -> IO ()\ngraficaLichtenberg n =\n  plotList [ Key Nothing\n           , Title \"Numero de digitos de la sucesion de Lichtenberg\"\n           , PNG \"Sucesion_de_Lichtenberg.png\"\n           ]\n           (take n (map (length . show) lichtenberg1))\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>La sucesi\u00f3n de Lichtenberg esta formada por la representaci\u00f3n decimal de los n\u00fameros binarios de la sucesi\u00f3n de d\u00edgitos 0 y 1 alternados Los primeros t\u00e9rminos de ambas sucesiones son Alternada &#8230;.. Lichtenberg 0 &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. 0 1 &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. 1 10 &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. 2 101 &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; 5 1010 &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. 10 10101 &#8230;&#8230;&#8230;&#8230;&#8230;&#8230; 21 101010 &#8230;&#8230;&#8230;&#8230;&#8230;.. 42 1010101&#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":[8,166,248,91,185,376,174,28,415,10,181,11,309,6,33,45,47,146,410,9,76],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3665"}],"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=3665"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3665\/revisions"}],"predecessor-version":[{"id":3694,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3665\/revisions\/3694"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}