{"id":1387,"date":"2015-04-27T06:00:43","date_gmt":"2015-04-27T04:00:43","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=1387"},"modified":"2016-05-01T20:12:10","modified_gmt":"2016-05-01T18:12:10","slug":"distancia-invierte-y-suma-hasta-capicua","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/distancia-invierte-y-suma-hasta-capicua\/","title":{"rendered":"Distancia invierte y suma hasta capic\u00faa"},"content":{"rendered":"<p>Un n\u00famero es capic\u00faa si es igual le\u00eddo de izquierda a derecha que de derecha a izquierda; por ejemplo, el 4884.<\/p>\n<p>El transformado \u00abinvierte y suma\u00bb de un n\u00famero x es la suma de x y su n\u00famero invertido; es decir, el n\u00famero resultante de la inversi\u00f3n del orden en el que aparecen sus d\u00edgitos. Por ejemplo, el transformado de 124 es 124 + 421 = 545.<\/p>\n<p>Se aplica la transformaci\u00f3n \u00abinvierte y suma\u00bb hasta obtener un capic\u00faa. Por ejemplo, partiendo del n\u00famero 87, el proceso es<\/p>\n<pre lang=\"text\">\n     87 +   78 =  165 \n    165 +  561 =  726 \n    726 +  627 = 1353 \n   1353 + 3531 = 4884\n<\/pre>\n<p>El n\u00famero de pasos de dicho proceso es la distancia capic\u00faa del n\u00famero; por ejemplo, la distancia capic\u00faa de 87 es 4.<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   distanciaIS :: Integer -> Integer\n<\/pre>\n<p>tal que (distanciaIS x) es la distancia capic\u00faa de x. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   distanciaIS 11                   ==    0\n   distanciaIS 10                   ==    1\n   distanciaIS 19                   ==    2\n   distanciaIS 59                   ==    3\n   distanciaIS 69                   ==    4\n   distanciaIS 166                  ==    5\n   distanciaIS 79                   ==    6\n   distanciaIS 89                   ==   24\n   distanciaIS 10911                ==   55\n   distanciaIS 1000000079994144385  ==  259\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericLength)\n\n-- 1\u00aa soluci\u00f3n (por recursi\u00f3n)\n-- ===========================\n\ndistanciaIS1 :: Integer -> Integer\ndistanciaIS1 = genericLength . cadena\n\n-- (cadena x) es la lista de transformados de x que no son capic\u00faas. Por\n-- ejemplo, \n--    cadena 87  ==  [87,165,726,1353]\ncadena :: Integer -> [Integer]\ncadena x | esCapicua x = []\n         | otherwise   = x : cadena (transformadoIS x)\n\n-- (esCapicua x) se verifica si x es capic\u00faa. Por ejemplo,\n--    esCapicua 42524  ==  True\n--    esCapicua 42542  ==  False\nesCapicua :: Integer -> Bool\nesCapicua x = show x == reverse (show x)\n\n-- (transformadoIS x) es el n\u00famero obtenido sum\u00e1ndole a x el n\u00famero con los\n-- mismos d\u00edgitos que x pero en orden inverso. Por ejemplo,\n--    transformadoIS 1325  ==  6556\n--    transformadoIS 1375  ==  7106\ntransformadoIS :: Integer -> Integer\ntransformadoIS x = x + read (reverse (show x))\n\n-- 2\u00aa soluci\u00f3n (por recursi\u00f3n con contador)\ndistanciaIS2 :: Integer -> Integer\ndistanciaIS2 x = aux x 0\n    where aux x n | esCapicua x = n\n                  | otherwise   = aux (transformadoIS x) (n+1)\n\n-- 3\u00aa soluci\u00f3n (con iterate)\ndistanciaIS3 :: Integer -> Integer\ndistanciaIS3 =\n    genericLength . takeWhile (not . esCapicua) . iterate transformadoIS\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Un n\u00famero es capic\u00faa si es igual le\u00eddo de izquierda a derecha que de derecha a izquierda; por ejemplo, el 4884. El transformado \u00abinvierte y suma\u00bb de un n\u00famero x es la suma de x y su n\u00famero invertido; es decir, el n\u00famero resultante de la inversi\u00f3n del orden en el que aparecen sus d\u00edgitos&#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":[258,50,181,11,95,6,32,33,34],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1387"}],"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=1387"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1387\/revisions"}],"predecessor-version":[{"id":1415,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1387\/revisions\/1415"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=1387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=1387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=1387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}