{"id":1455,"date":"2015-05-15T06:00:02","date_gmt":"2015-05-15T04:00:02","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=1455"},"modified":"2015-06-13T16:36:10","modified_gmt":"2015-06-13T14:36:10","slug":"numeros-alternados","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/numeros-alternados\/","title":{"rendered":"N\u00fameros alternados"},"content":{"rendered":"<p>Decimos que un n\u00famero es <strong>alternado<\/strong> si no tiene dos cifras consecutivas iguales ni tres cifras consecutivas en orden creciente no estricto o decreciente no estricto. Por ejemplo, los n\u00fameros 132425 y 92745 son alternados, pero los n\u00fameros 12325 y 29778 no. Las tres primeras cifras de 12325 est\u00e1n en orden creciente y 29778 tiene dos cifras iguales consecutivas.<\/p>\n<p>Definir la constante<\/p>\n<pre lang=\"text\">\n   alternados :: [Integer]\n<\/pre>\n<p>cuyo valor es la lista infinita de los n\u00fameros alternados. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   take 10 alternados                      ==  [0,1,2,3,4,5,6,7,8,9]\n   length (takeWhile (< 1000) alternados)  ==  616\n   alternados !! 1234567                   ==  19390804\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.Char (digitToInt)\n\n-- 1\u00aa definici\u00f3n\n-- =============\n\n-- (cifras n) es la lista de las cifras de n. Por ejemplo.\n--    cifras 325  ==  [3,2,5]\ncifras :: Integer -> [Int]\ncifras n = map digitToInt (show n)\n\n-- (cifrasAlternadas xs) se verifica si las lista de cifras xs es\n-- alternada. Por ejemplo,\n--    cifrasAlternadas [1,3,2,4,2,5]  ==  True\n--    cifrasAlternadas [9,2,7,4,5]    ==  True\n--    cifrasAlternadas [1,2,3,2,5]    ==  False\n--    cifrasAlternadas [2,9,7,7,8]    ==  False\ncifrasAlternadas :: [Int] -> Bool\ncifrasAlternadas [x1,x2] = x1 \/= x2\ncifrasAlternadas (x1:x2:x3:xs) =\n    not (((x1 <= x2) &#038;&#038; (x2 <= x3)) || ((x1 >= x2) && (x2 >= x3))) &&\n    cifrasAlternadas (x2:x3:xs)\ncifrasAlternadas _ = True\n\n-- (alternado n) se verifica si n es un n\u00famero alternado. Por ejemplo,\n--    alternado 132425  ==  True\n--    alternado 92745   ==  True\n--    alternado 12325   ==  False\n--    alternado 29778   ==  False\nalternado :: Integer -> Bool\nalternado n = cifrasAlternadas (cifras n)\n\nalternados1 :: [Integer]\nalternados1 = filter alternado [0..]\n\n-- 2\u00aa definici\u00f3n\n-- =============\n\n-- (extiendeAlternado n) es la lista de n\u00fameros alternados que se pueden\n-- obtener a\u00f1adiendo una cifra al final del n\u00famero alternado n. Por\n-- ejemplo,\n--    extiendeAlternado 7   ==  [70,71,72,73,74,75,76,78,79]\n--    extiendeAlternado 24  ==  [240,241,242,243]\n--    extiendeAlternado 42  ==  [423,424,425,426,427,428,429]\nextiendeAlternado :: Integer -> [Integer]\nextiendeAlternado n \n    | n < 10    = [n*10+h | h <- [0..n-1]++[n+1..9]]\n    | d < c     = [n*10+h | h <- [0..c-1]]\n    | otherwise = [n*10+h | h <- [c+1..9]]\n    where c = n `mod` 10\n          d = (n `mod` 100) `div` 10\n\nalternados2 :: [Integer]\nalternados2 = concat (iterate (concatMap extiendeAlternado) [0])\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Decimos que un n\u00famero es alternado si no tiene dos cifras consecutivas iguales ni tres cifras consecutivas en orden creciente no estricto o decreciente no estricto. Por ejemplo, los n\u00fameros 132425 y 92745 son alternados, pero los n\u00fameros 12325 y 29778 no. Las tres primeras cifras de 12325 est\u00e1n en orden creciente y 29778 tiene&#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":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1455"}],"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=1455"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1455\/revisions"}],"predecessor-version":[{"id":1519,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/1455\/revisions\/1519"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=1455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=1455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=1455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}