{"id":3037,"date":"2017-03-02T06:00:43","date_gmt":"2017-03-02T04:00:43","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3037"},"modified":"2017-03-09T11:36:47","modified_gmt":"2017-03-09T09:36:47","slug":"contando-en-la-arena","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/contando-en-la-arena\/","title":{"rendered":"Contando en la arena"},"content":{"rendered":"<p>El problema de ayer de <a href=\"https:\/\/www.aceptaelreto.com\/\">\u00a1Acepta el reto!<\/a> fue <a href=\"http:\/\/bit.ly\/2mFBDsa\">Contando en la arena<\/a> cuyo enunciado es el siguiente:<\/p>\n<blockquote><p>\nEs ampliamente conocido que escribimos los n\u00fameros utilizando base 10, en la que expresamos las cantidades utilizando 10 d\u00edgitos distintos (0\u20269). El valor de cada uno de ellos depende de la posici\u00f3n que ocupe dentro del n\u00famero, pues cada d\u00edgito se multiplica por una potencia de 10 distinta seg\u00fan cu\u00e1l sea esa posici\u00f3n. <\/p>\n<p>La descomposici\u00f3n, por ejemplo, del n\u00famero 1.234 es: 1.234 = 1\u00d710^3 + 2\u00d710^2 + 3\u00d710^1 + 4\u00d710^0<\/p>\n<p>Otra base muy conocida es la base 2 al ser la utilizada por los dispositivos electr\u00f3nicos. En ella s\u00f3lo hay dos d\u00edgitos distintos (0 y 1), que se ven multiplicados por potencias de 2. <\/p>\n<p>Mucho antes de que llegaran la base 2, la base 10 e incluso los n\u00fameros romanos, los primeros seres humanos contaban haciendo surcos en la arena, muescas en un trozo de madera o colocando palos en l\u00ednea. Estaban, sin saberlo, usando base 1. En ella s\u00f3lo hay un s\u00edmbolo y cada d\u00edgito es multiplicado por una potencia de 1. Dado que 1^n = 1 el resultado es que todos los d\u00edgitos tienen el mismo peso.\n<\/p><\/blockquote>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   transformaAbase1 :: FilePath -> FilePath -> IO ()\n<\/pre>\n<p>tal que al evaluar (transformaAbase1 f1 f2) lee el contenido del fichero f1 (que estar\u00e1 compuesto por distintos n\u00fameros mayores que 0, cada uno en una l\u00ednea) y escribe en el fichero f2 una l\u00ednea con la representaci\u00f3n en base 1 de cada uno de los n\u00fameros de f1 excepto el 0 final. Por ejemplo, si el contenido de \u00abEntrada.txt\u00bb es<\/p>\n<pre lang=\"text\">\n1\n4\n6\n0\n<\/pre>\n<p>al evaluar (transformaAbase1 \u00abEntrada.txt\u00bb \u00abSalida.txt\u00bb) el contenido de \u00abSalida.txt\u00bb debe de ser<\/p>\n<pre lang=\"text\">\n1\n1111\n111111\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\ntransformaAbase1 :: FilePath -> FilePath -> IO ()\ntransformaAbase1 f1 f2 = do\n  cs <- readFile f1\n  writeFile f2 (transformaAbase1Aux cs)\n\n-- (transformaAbase1Aux cs) es la cadena obtenida transformando a base 1\n-- cada uno de los n\u00fameros de cs. Por ejemplo,\n--    \u03bb> transformaAbase1Aux \"1\\n4\\n6\\n0\\n\" \n--    \"1\\n1111\\n111111\\n\"\ntransformaAbase1Aux :: String -> String\ntransformaAbase1Aux cs =\n  unlines (map (show . enBase1) (numeros cs))\n\n-- (numeros cs) es la lista de los n\u00fameros de cs, excepto el \u00faltimo. Por\n-- ejemplo, \n--    numeros \"1\\n4\\n6\\n0\\n\"  ==  [1,4,6]\nnumeros :: String -> [Integer]\nnumeros cs  =\n  init (map read (lines cs))\n\n-- (enBsase1 x) es la representaci\u00f3n de x en base 1. Por ejemplo,\n--    enBase1 4  ==  1111\nenBase1 :: Integer -> Integer\nenBase1 x = (10^x - 1) `div` 9\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>El problema de ayer de \u00a1Acepta el reto! fue Contando en la arena cuyo enunciado es el siguiente: Es ampliamente conocido que escribimos los n\u00fameros utilizando base 10, en la que expresamos las cantidades utilizando 10 d\u00edgitos distintos (0\u20269). El valor de cada uno de ellos depende de la posici\u00f3n que ocupe dentro del n\u00famero,&#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":[30,369,285,383,10,11,95,370,33,382,380],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3037"}],"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=3037"}],"version-history":[{"count":7,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3037\/revisions"}],"predecessor-version":[{"id":3071,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3037\/revisions\/3071"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}