{"id":2531,"date":"2013-02-24T12:39:45","date_gmt":"2013-02-24T12:39:45","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=2531"},"modified":"2013-03-08T05:47:33","modified_gmt":"2013-03-08T05:47:33","slug":"otra-curiosa-propiedad-del-13-en-haskell","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/otra-curiosa-propiedad-del-13-en-haskell\/","title":{"rendered":"Otra curiosa propiedad del 123 en Haskell"},"content":{"rendered":"<p>La <a href=\"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/una-curiosa-propiedad-del-123-en-haskell\">relaci\u00f3n anterior<\/a> se basaba en el art\u00edculo <a href=\"http:\/\/gaussianos.com\/una-curiosa-propiedad-del-123\">Una curiosa propiedad del 123<\/a> publicado en <a href=\"http:\/\/gaussianos.com\">Gaussianos<\/a>. Otra curiosa propiedad del 123 se presenta en el art\u00edculo <a href=\"http:\/\/simplementenumeros.blogspot.com.es\/2013\/02\/1087-tres-productos-todos-los-digitos.html\">Tres productos todos los d\u00edgitos<\/a> publicado esta semana en <a href=\"http:\/\/simplementenumeros.blogspot.com.es\">N\u00fameros y algo m\u00e1s<\/a>. A partir del \u00faltimo art\u00edculo he elaborado la siguiente relaci\u00f3n de ejercicios de Haskell para la asignatura de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a>.<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- ---------------------------------------------------------------------\r\n-- Librer\u00edas auxiliares                                               --\r\n-- ---------------------------------------------------------------------\r\n\r\nimport Data.List\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1. Definir la funci\u00f3n\r\n--    cifras :: Int -> [Int]\r\n-- tal que (cifras n) es la lista de las cifras de n. Por ejemplo,\r\n--    cifras 1021052  ==  [1,0,2,1,0,5,2]\r\n-- ---------------------------------------------------------------------\r\n\r\ncifras :: Int -> [Int]\r\ncifras n = [read [d] | d <- show n]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2. Definir la funci\u00f3n\r\n--    elementosDistintosNoNulos :: [Int] -> Int\r\n-- tal que (elementosDistintosNoNulos xs) es el n\u00famero de elementos\r\n-- distintos y no nulos de la lista xs. Por ejemplo,\r\n--    elementosDistintosNoNulos [1,0,2,1,0,5,2]  ==  3\r\n-- --------------------------------------------------------------------- \r\n\r\nelementosDistintosNoNulos :: [Int] -> Int\r\nelementosDistintosNoNulos [] = 0\r\nelementosDistintosNoNulos (x:xs) \r\n  | x == 0 || elem x xs  = elementosDistintosNoNulos xs\r\n  | otherwise            = 1 + elementosDistintosNoNulos xs\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3. Definir la funci\u00f3n\r\n--    cifrasDistintasNoNulas :: Int -> Int\r\n-- tal que (cifrasDistintasNoNulas n) es el n\u00famero de cifras distintas y\r\n-- no nulas del n\u00famero n. Por ejemplo,\r\n--    cifrasDistintasNoNulas 1021052  ==  3\r\n-- --------------------------------------------------------------------- \r\n\r\ncifrasDistintasNoNulas :: Int -> Int\r\ncifrasDistintasNoNulas = elementosDistintosNoNulos . cifras\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 4. Definir la funci\u00f3n\r\n--    factores :: Int -> [(Int,Int,Int)]\r\n-- tal que (factores n) es la lista de ternas de d\u00edgitos (x,y,z) talea\r\n-- que n*x, n*y y n*z son tres n\u00fameros de tres cifras que entre los tres\r\n-- tienen los nueve d\u00edgitos del uno al nueve sin que se repita ninguno. \r\n-- Por ejemplo,\r\n--    factores 107  ==  [(3,7,8)]\r\n-- ya que \r\n--    107*3 = 321, \r\n--    107*7 = 749 y \r\n--    107*8 = 856.\r\n-- ---------------------------------------------------------------------\r\n\r\nfactores :: Int -> [(Int,Int,Int)]\r\nfactores n = \r\n  [(x,y,z) | \r\n   x <- [1..m],   cifrasDistintasNoNulas (n*x) == 3,\r\n   y <- [x+1..m], cifrasDistintasNoNulas (n*(10^3*x+y)) == 6,\r\n   z <- [y+1..m], cifrasDistintasNoNulas (n*(10^6*x+10^3*y+z)) == 9]\r\n  where m = 999 `div` n\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5. Un n\u00famero n es completo si tiene 3 cifras y existen 3\r\n-- factores (x,y,z) tales que n*x, n*y y n*z son n\u00fameros de 3 cifras y\r\n-- entre los tres tienen los nueve d\u00edgitos del uno al nueve sin que se\r\n-- repita ninguno.  \r\n-- \r\n-- Definir la constante        \r\n--    completos :: [Int]\r\n-- tal que completos es la lista de los n\u00fameros completos.\r\n--         \r\n-- Calcular todos los n\u00fameros completos.        \r\n-- ---------------------------------------------------------------------\r\n\r\ncompletos :: [Int]\r\ncompletos = [n | n <- [100..999], not (null (factores n))]\r\n\r\n-- El c\u00e1lculo es\r\n--    ghci> completos\r\n--    [107,109,123,129,192,219,273,327]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 6. Definir la funci\u00f3n\r\n--    comunes :: Int -> Int -> Int\r\n-- tal que (comunes x y) es n\u00famero de las cifras comunes de los\r\n-- n\u00fameros x e y. Por ejemplo,\r\n--    comunes 6563 163479  ==  2\r\n-- ---------------------------------------------------------------------\r\n\r\ncomunes :: Int -> Int -> Int\r\ncomunes x y = length (nub (intersect (cifras x) (cifras y)))\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 7. Un n\u00famero n es completo especial si tiene 3 cifras y \r\n-- existen 3 factores (x,y,z) tales que n*x, n*y y n*z son n\u00fameros de 3 \r\n-- cifras tales que entre los tres tienen los nueve d\u00edgitos del uno al\r\n-- nueve sin que se repita ninguno y, adem\u00e1s, n tiene un d\u00edgito suyo en\r\n-- cada producto uno de los productos n*x, n*y y n*z.\r\n-- \r\n-- Definir la constante        \r\n--    completosEspeciales :: [Int]\r\n-- tal que completosEspeciales es la lista de los n\u00fameros completos\r\n-- especiales. \r\n--         \r\n-- Calcular todos los n\u00fameros completos especiales.       \r\n-- ---------------------------------------------------------------------\r\n\r\ncompletosEspeciales :: [Int]\r\ncompletosEspeciales =\r\n  [n | n <- completos,\r\n       (x,y,z) <- factores n,\r\n       and [comunes n (n*d) == 1 | d <- [x,y,z]]]\r\n\r\n-- El c\u00e1lculo es\r\n--    ghci> completosEspeciales\r\n--    [123]\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>La relaci\u00f3n anterior se basaba en el art\u00edculo Una curiosa propiedad del 123 publicado en Gaussianos. Otra curiosa propiedad del 123 se presenta en el art\u00edculo Tres productos todos los d\u00edgitos publicado esta semana en N\u00fameros y algo m\u00e1s. A partir del \u00faltimo art\u00edculo he elaborado la siguiente relaci\u00f3n de ejercicios de Haskell para la&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","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":[1],"tags":[270],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2531"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=2531"}],"version-history":[{"count":6,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2531\/revisions"}],"predecessor-version":[{"id":2685,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2531\/revisions\/2685"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=2531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=2531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=2531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}