{"id":4640,"date":"2019-01-28T06:00:51","date_gmt":"2019-01-28T04:00:51","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=4640"},"modified":"2022-03-26T11:30:01","modified_gmt":"2022-03-26T09:30:01","slug":"numeros-con-digitos-1-y-2","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/numeros-con-digitos-1-y-2\/","title":{"rendered":"N\u00fameros con d\u00edgitos 1 y 2"},"content":{"rendered":"<p>Definir las funciones<\/p>\n<pre lang=\"text\"> \n   numerosCon1y2               :: Int -> [Int]\n   restosNumerosCon1y2         :: Int -> [Int]\n   grafica_restosNumerosCon1y2 :: Int -> IO ()\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(numerosCon1y2 n) es la lista ordenada de n\u00fameros de n d\u00edgitos que se pueden formar con los d\u00edgitos 1 y 2. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">   \n     numerosCon1y2 2  ==  [11,12,21,22] \n     numerosCon1y2 3  ==  [111,112,121,122,211,212,221,222]\n<\/pre>\n<ul>\n<li>(restosNumerosCon1y2 n) es la lista de los restos de dividir los elementos de (restosNumerosCon1y2 n) entre 2^n. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">   \n     restosNumerosCon1y2 2 == [3,0,1,2]\n     restosNumerosCon1y2 3 == [7,0,1,2,3,4,5,6]\n     restosNumerosCon1y2 4 == [7,8,1,2,11,12,5,6,15,0,9,10,3,4,13,14]\n<\/pre>\n<ul>\n<li>(graficaRestosNumerosCon1y2 n) dibuja la gr\u00e1fica de los restos de dividir los elementos de (restosNumerosCon1y2 n) entre 2^n. Por ejemplo, (graficaRestosNumerosCon1y2 3) dibuja<\/li>\n<\/ul>\n<p><a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_3.png?resize=640%2C480\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-4641\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_3.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_3.png?resize=300%2C225&amp;ssl=1 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p>(graficaRestosNumerosCon1y2 4) dibuja<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_4.png?resize=640%2C480\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-4642\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_4.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_4.png?resize=300%2C225&amp;ssl=1 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p>y (graficaRestosNumerosCon1y2 5) dibuja<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_5.png?resize=640%2C480\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-4643\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_5.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2019\/01\/Numeros_con_digitos_1_y_2_5.png?resize=300%2C225&amp;ssl=1 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p><strong>Nota:<\/strong> En la definici\u00f3n usar la funci\u00f3n <a href=\"http:\/\/bit.ly\/2HzYwvA\">plotListStyle<\/a> y como su segundo argumento (el PloStyle) usar<\/p>\n<pre lang=\"text\">   \n     (defaultStyle {plotType = LinesPoints,\n                    lineSpec = CustomStyle [PointType 7]})\n<\/pre>\n<p>Comprobar con QuickCheck que todos los elementos de (restosNumerosCon1y2 n) son distintos.<\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Test.QuickCheck\nimport Graphics.Gnuplot.Simple\n\n-- Definici\u00f3n de numerosCon1y2\n-- ===========================\n\nnumerosCon1y2 :: Int -> [Int]\nnumerosCon1y2 = map digitosAnumero . digitos\n\n-- (d\u00edgitos n) es la lista ordenada de de listas de n elementos que\n-- se pueden formar con los d\u00edgitos 1 y 2. Por ejemplo,\n--    \u03bb> digitos 2\n--    [[1,1],[1,2],[2,1],[2,2]]\n--    \u03bb> digitos 3\n--    [[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,1],[2,1,2],[2,2,1],[2,2,2]]\ndigitos :: Int -> [[Int]]\ndigitos 0 = [[]]\ndigitos n = map (1:) xss ++ map (2:) xss\n  where xss = digitos (n-1)\n\n-- (digitosAnumero ds) es el n\u00famero cuyos d\u00edgitos son ds. Por ejemplo,\n--    digitosAnumero [2,0,1,9]  ==  2019\ndigitosAnumero :: [Int] -> Int\ndigitosAnumero = read . concatMap show\n\n-- Definici\u00f3n de restosNumerosCon1y2\n-- =================================\n\nrestosNumerosCon1y2 :: Int -> [Int]\nrestosNumerosCon1y2 n =\n  [x `mod` m | x <- numerosCon1y2 n]\n  where m = 2^n\n\n-- Definici\u00f3n de graficaRestosNumerosCon1y2\n-- =========================================\n\ngraficaRestosNumerosCon1y2 :: Int -> IO ()\ngraficaRestosNumerosCon1y2 n =\n  plotListStyle\n    [ Key Nothing\n    , PNG (\"Numeros_con_digitos_1_y_2_\" ++ show n ++ \".png\")\n    ]\n    (defaultStyle {plotType = LinesPoints,\n                   lineSpec = CustomStyle [PointType 7]})\n    (restosNumerosCon1y2 n)\n\n-- Propiedad de restosNumerosCon1y2\n-- ================================\n\n-- La propiedad\nprop_restosNumerosCon1y2 :: Positive Int -> Bool\nprop_restosNumerosCon1y2 (Positive n) =\n  todosDistintos (restosNumerosCon1y2 n)\n  where todosDistintos xs = xs == nub xs\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheckWith (stdArgs {maxSize=12}) prop_restosNumerosCon1y2\n--    +++ OK, passed 100 tests.\n<\/pre>\n<h4>Pensamiento<\/h4>\n<blockquote><p>\n\u00bfPara qu\u00e9 llamar caminos<br \/>\na los surcos del azar? &#8230;<br \/>\nTodo el que camina anda,<br \/>\ncomo Jes\u00fas, sobre el mar.<\/p>\n<p>Antonio Machado\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Definir las funciones numerosCon1y2 :: Int -> [Int] restosNumerosCon1y2 :: Int -> [Int] grafica_restosNumerosCon1y2 :: Int -> IO () tales que (numerosCon1y2 n) es la lista ordenada de n\u00fameros de n d\u00edgitos que se pueden formar con los d\u00edgitos 1 y 2. Por ejemplo, numerosCon1y2 2 == [11,12,21,22] numerosCon1y2 3 == [111,112,121,122,211,212,221,222] (restosNumerosCon1y2 n) es&#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,58,376,10,89,24,11,463,95,6,33,146],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4640"}],"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=4640"}],"version-history":[{"count":6,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4640\/revisions"}],"predecessor-version":[{"id":4679,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4640\/revisions\/4679"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=4640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=4640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=4640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}