{"id":5583,"date":"2016-10-26T18:57:03","date_gmt":"2016-10-26T16:57:03","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=5583"},"modified":"2016-11-02T18:58:16","modified_gmt":"2016-11-02T17:58:16","slug":"i1m2016-1o-examen-de-programacion-con-haskell","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2016-1o-examen-de-programacion-con-haskell\/","title":{"rendered":"I1M2016: 1\u00ba examen de programaci\u00f3n con Haskell"},"content":{"rendered":"<p>Hoy se ha realizado el 1\u00ba examen del curso de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-16\">Inform\u00e1tica<\/a> (de 1\u00ba de Grado en Matem\u00e1ticas). Los ejercicios, y sus soluciones, se muestran a continuaci\u00f3n.<\/p>\n<p><!--more--><\/p>\n<pre lang=\"haskell\">\n-- Inform\u00e1tica (1\u00ba del Grado en Matem\u00e1ticas, Grupo 4)\n-- 1\u00ba examen de evaluaci\u00f3n continua (26 de octubre de 2016)\n-- ---------------------------------------------------------------------\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 1. Definir la funci\u00f3n\n--    ceros :: Int -> Int\n-- tal que (ceros n) es el n\u00famero de ceros en los que termina el n\u00famero\n-- n. Por ejemplo,\n--    ceros 30500  ==  2\n--    ceros 30501  ==  0\n-- ---------------------------------------------------------------------\n\n-- 1\u00aa definici\u00f3n (por recursi\u00f3n):\nceros :: Int -> Int\nceros n | n `rem` 10 == 0 = 1 + ceros (n `div`10)\n        | otherwise       = 0\n\n-- 2\u00aa definici\u00f3n (por comprensi\u00f3n):\nceros2 :: Int -> Int\nceros2 n = head [x | x <- [0..]\n                   , n `rem` (10^x) \/= 0]\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 2. Una representaci\u00f3n de 46 en base 3 es [1,0,2,1] pues\n--    46 = 1*3^0 + 0*3^1 + 2*3^2 + 1*3^3.\n-- Una representaci\u00f3n de 20 en base 2 es [0,0,1,0,1] pues\n--    20 = 1*2^2 + 1*2^4. \n-- \n-- Definir la funci\u00f3n\n--    enBase :: Int -> [Int] -> Int\n-- tal que (enBase b xs) es el n\u00famero n tal que su representaci\u00f3n en\n-- base b es xs. Por ejemplo, \n--    enBase 3 [1,0,2,1]        == 46\n--    enBase 2 [0,0,1,0,1]      == 20\n--    enBase 2 [1,1,0,1]        == 11\n--    enBase 5 [0,2,1,3,1,4,1]  == 29160\n-- ---------------------------------------------------------------------\n\nenBase :: Int -> [Int] -> Int\nenBase b xs = sum [y*b^n | (y,n) <- zip xs [0..]]\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 3. Definir la funci\u00f3n \n--    repetidos :: Eq a => [a] -> [a]\n-- tal que (repetidos xs) es la lista de los elementos repetidos de\n-- xs. Por ejemplo, \n--    repetidos [1,3,2,1,2,3,4] == [1,3,2]\n--    repetidos [1,2,3]         == []\n-- ---------------------------------------------------------------------\n\nrepetidos :: Eq a => [a] -> [a]\nrepetidos [] = []\nrepetidos (x:xs) | x `elem` xs = x : repetidos xs\n                 | otherwise   =  repetidos xs\n\n-- ---------------------------------------------------------------------\n-- Ejercicio 4. [Problema 37 del proyecto Euler] Un n\u00famero\n-- primo es truncable si los n\u00fameros que se obtienen eliminado cifras,\n-- de derecha a izquierda, son primos. Por ejemplo, 599 es un primo\n-- truncable porque 599, 59 y 5 son primos; en cambio, 577 es un primo\n-- no truncable porque 57 no es primo.  \n-- \n-- Definir la funci\u00f3n \n--    primoTruncable :: Int -> Bool\n-- tal que (primoTruncable x) se verifica si x es un primo\n-- truncable. Por ejemplo,\n--    primoTruncable 599  ==  True\n--    primoTruncable 577  ==  False\n-- ---------------------------------------------------------------------\n\nprimoTruncable :: Int -> Bool\nprimoTruncable x \n  | x < 10    = primo x\n  | otherwise = primo x &#038;&#038; primoTruncable (x `div` 10)\n\n-- (primo x) se verifica si x es primo.\nprimo :: Int -> Bool\nprimo x = factores x == [1,x]\n\n-- (factores x) es la lista de los factores de x.\nfactores :: Int -> [Int]\nfactores x = [y | y <- [1..x]\n                , x `rem` y == 0]\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Hoy se ha realizado el 1\u00ba examen del curso de Inform\u00e1tica (de 1\u00ba de Grado en Matem\u00e1ticas). Los ejercicios, y sus soluciones, se muestran a continuaci\u00f3n.<\/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":[260],"tags":[270,313],"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\/5583"}],"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=5583"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/5583\/revisions"}],"predecessor-version":[{"id":5584,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/5583\/revisions\/5584"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=5583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=5583"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=5583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}