{"id":4814,"date":"2019-03-12T06:00:39","date_gmt":"2019-03-12T04:00:39","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=4814"},"modified":"2022-03-26T11:29:14","modified_gmt":"2022-03-26T09:29:14","slug":"numeros-ciclopes","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/numeros-ciclopes\/","title":{"rendered":"N\u00fameros c\u00edclopes"},"content":{"rendered":"<p>Un n\u00famero c\u00edclope es un n\u00famero natural cuya representaci\u00f3n binaria s\u00f3lo tiene un cero en el centro. Por ejemplo,<\/p>\n<pre lang=\"text\"> \n     0      es ciclope porque su representaci\u00f3n binaria es 0       \n     1   no es ciclope porque su representaci\u00f3n binaria es 1       \n     5      es ciclope porque su representaci\u00f3n binaria es 101     \n     9   no es ciclope porque su representaci\u00f3n binaria es 1001    \n    10   no es ciclope porque su representaci\u00f3n binaria es 1010    \n    27      es ciclope porque su representaci\u00f3n binaria es 11011   \n    85   no es ciclope porque su representaci\u00f3n binaria es 1010101 \n   101   no es ciclope porque su representaci\u00f3n binaria es 1100101 \n   111   no es ciclope porque su representaci\u00f3n binaria es 1101111 \n   119      es ciclope porque su representaci\u00f3n binaria es 1110111 \n<\/pre>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\"> \n   esCiclope       :: Integer -> Bool\n   ciclopes        :: [Integer]\n   graficaCiclopes :: Int -> IO ()\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(esCiclope n) se verifica si el n\u00famero natual n es c\u00edclope. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\"> \n      esCiclope 0    ==  True\n      esCiclope 1    ==  False\n      esCiclope 5    ==  True\n      esCiclope 9    ==  False\n      esCiclope 10   ==  False\n      esCiclope 27   ==  True\n      esCiclope 85   ==  False\n      esCiclope 101  ==  False\n      esCiclope 111  ==  False\n      esCiclope 119  ==  True\n<\/pre>\n<ul>\n<li>ciclopes es la lista de los n\u00famero c\u00edclopes. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\"> \n     \u03bb> take 12 ciclopes\n     [0,5,27,119,495,2015,8127,32639,130815,523775,2096127,8386559]\n     \u03bb> length (show (ciclopes !! (10^5)))\n     60207\n<\/pre>\n<ul>\n<li>(graficaCiclopes n) dibuja la gr\u00e1fica del \u00faltimo d\u00edgito de los n primeros n\u00fameros c\u00edclopes. Por ejemplo, (graficaCiclopes n) dibuja<\/li>\n<\/ul>\n<p><a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/03\/Numeros_ciclopes.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/03\/Numeros_ciclopes.png?resize=640%2C480\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-4815\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/03\/Numeros_ciclopes.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/03\/Numeros_ciclopes.png?resize=300%2C225&amp;ssl=1 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Graphics.Gnuplot.Simple\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\n--    esCiclope 5  ==  True\n--    esCiclope 6  ==  False\nesCiclope :: Integer -> Bool\nesCiclope n =\n  esCiclopeBinario (decimalAbinario n)\n\n--    decimalAbinario 4  ==  [0,0,1]\n--    decimalAbinario 5  ==  [1,0,1]\n--    decimalAbinario 6  ==  [0,1,1]\ndecimalAbinario :: Integer -> [Integer]\ndecimalAbinario 0 = [0]\ndecimalAbinario 1 = [1]\ndecimalAbinario n = r : decimalAbinario q\n  where (q,r) = quotRem n 2\n\n--    esCiclopeBinario [1,1,0,1,1]  ==  True\n--    esCiclopeBinario [1,1,0,1]  ==  False\n--    esCiclopeBinario [1,1,2,1,1]  ==  False\n--    esCiclopeBinario [2,2,0,2,2]  ==  False\nesCiclopeBinario :: [Integer] -> Bool\nesCiclopeBinario xs =\n  odd n && xs == ys ++ 0 : ys\n  where n  = length xs\n        m  = n `div` 2\n        ys = replicate m 1\n\n--    take 8 ciclopes  ==  [0,5,27,119,495,2015,8127,32639]\nciclopes :: [Integer]\nciclopes = filter esCiclope [0..]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\n--    take 8 ciclopes2  ==  [0,5,27,119,495,2015,8127,32639]\nciclopes2 :: [Integer]\nciclopes2 =\n  [binarioAdecimal (replicate n 1 ++ 0 : replicate n 1) | n <- [0..]]\n\n--    binarioAdecimal [0,1,1]  ==  6\nbinarioAdecimal :: [Integer] -> Integer\nbinarioAdecimal [x]    = x\nbinarioAdecimal (x:xs) = x + 2 * binarioAdecimal xs\n\nesCiclope2 :: Integer -> Bool\nesCiclope2 n =\n  n `pertenece` ciclopes2\n\npertenece :: Integer -> [Integer] -> Bool\npertenece x ys =\n  x == head (dropWhile (<x) ys)\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\n--    take 8 ciclopes3  ==  [0,5,27,119,495,2015,8127,32639]\nciclopes3 :: [Integer]\nciclopes3 =\n  [sum [2^k | k <- [0..n-1]] + sum [2^k | k <- [n+1..n+n]] | n <- [0..]]\n\nesCiclope3 :: Integer -> Bool\nesCiclope3 n =\n  n `pertenece` ciclopes3\n\n-- 4\u00aa soluci\u00f3n\n-- ===========\n\n--    take 8 ciclopes3  ==  [0,5,27,119,495,2015,8127,32639]\nciclopes4 :: [Integer]\nciclopes4 =\n  [2^(2*n+1) - 1 - 2^n | n <- [0..]]\n\nesCiclope4 :: Integer -> Bool\nesCiclope4 n =\n  n `pertenece` ciclopes4\n\n\n-- 5\u00aa soluci\u00f3n\n-- ===========\n\n--    take 8 ciclopes5  ==  [0,5,27,119,495,2015,8127,32639]\nciclopes5 :: [Integer]\nciclopes5 =\n  [2*4^n - 1 - 2^n | n <- [0..]]\n\nesCiclope5 :: Integer -> Bool\nesCiclope5 n =\n  n `pertenece` ciclopes5\n\n-- 6\u00aa soluci\u00f3n\n-- ===========\n\n--    take 8 ciclopes6  ==  [0,5,27,119,495,2015,8127,32639]\nciclopes6 :: [Integer]\nciclopes6 =\n  [2*x*x - 1 - x | x <- iterate (*2) 1]\n  \nesCiclope6 :: Integer -> Bool\nesCiclope6 n =\n  n `pertenece` ciclopes6\n\n\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n--    \u03bb> ciclopes !! 9\n--    523775\n--    (6.68 secs, 4,696,734,960 bytes)\n--    \u03bb> ciclopes2 !! 9\n--    523775\n--    (0.00 secs, 134,664 bytes)\n--    \u03bb> ciclopes3 !! 9\n--    523775\n--    (0.00 secs, 150,920 bytes)\n--    \u03bb> ciclopes4 !! 9\n--    523775\n--    (0.01 secs, 131,936 bytes)\n--    \u03bb> ciclopes5 !! 9\n--    523775\n--    (0.00 secs, 132,064 bytes)\n--\n--    \u03bb> length (show (ciclopes2 !! (3*10^4)))\n--    18063\n--    (0.65 secs, 486,437,480 bytes)\n--    \u03bb> length (show (ciclopes3 !! (3*10^4)))\n--    18063\n--    (2.94 secs, 1,188,645,584 bytes)\n--    \u03bb> length (show (ciclopes4 !! (3*10^4)))\n--    18063\n--    (0.02 secs, 6,769,592 bytes)\n--    \u03bb> length (show (ciclopes5 !! (3*10^4)))\n--    18063\n--    (0.02 secs, 6,773,552 bytes)\n--\n--    \u03bb> length (show (ciclopes2 !! (10^5)))\n--    60207\n--    (6.42 secs, 5,148,671,368 bytes)\n--    \u03bb> length (show (ciclopes4 !! (10^5)))\n--    60207\n--    (0.07 secs, 22,291,480 bytes)\n--    \u03bb> length (show (ciclopes5 !! (10^5)))\n--    60207\n--    (0.04 secs, 22,316,216 bytes)\n--    \n--    \u03bb> length (show (ciclopes4 !! (5*10^6)))\n--    3010301\n--    (2.34 secs, 1,116,327,832 bytes)\n--    \u03bb> length (show (ciclopes5 !! (5*10^6)))\n--    3010301\n--    (2.39 secs, 1,099,177,056 bytes)\n\n-- Definici\u00f3n de graficaCiclopes\n-- =============================\n\ngraficaCiclopes :: Int -> IO ()\ngraficaCiclopes n =\n  plotList [ Key Nothing\n           -- , PNG \"Numeros_ciclopes.png\"\n           ]\n           [x `mod` 10 | x <- take n ciclopes5] \n<\/pre>\n<h4>Pensamiento<\/h4>\n<blockquote><p>\n\u00bfSabes cuando el agua suena,<br \/>\nsi es agua de cumbre o valle,<br \/>\nde plaza, jard\u00edn o huerta?<br \/>\nCantores, dejad<br \/>\npalmas y jaleo<br \/>\npara los dem\u00e1s.<\/p>\n<p>Antonio Machado\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Un n\u00famero c\u00edclope es un n\u00famero natural cuya representaci\u00f3n binaria s\u00f3lo tiene un cero en el centro. Por ejemplo, 0 es ciclope porque su representaci\u00f3n binaria es 0 1 no es ciclope porque su representaci\u00f3n binaria es 1 5 es ciclope porque su representaci\u00f3n binaria es 101 9 no es ciclope porque su representaci\u00f3n binaria&#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":[7],"tags":[8,30,59,38,376,71,50,28,92,11,309,254,6,19,40],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4814"}],"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=4814"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4814\/revisions"}],"predecessor-version":[{"id":4845,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4814\/revisions\/4845"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=4814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=4814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=4814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}