{"id":3339,"date":"2013-05-16T16:41:30","date_gmt":"2013-05-16T16:41:30","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=3339"},"modified":"2013-05-19T16:42:16","modified_gmt":"2013-05-19T16:42:16","slug":"i1m2012-5%c2%ba-examen-de-la-evaluacion-continua","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2012-5%c2%ba-examen-de-la-evaluacion-continua\/","title":{"rendered":"I1M2012: 5\u00ba examen de la evaluaci\u00f3n continua"},"content":{"rendered":"<p>En la clase de hoy de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> se ha realizado el 5\u00ba examen de la evaluaci\u00f3n continua.<\/p>\n<p>\nA continuaci\u00f3n se muestra el examen junto con su soluci\u00f3n:<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- Inform\u00e1tica (1\u00ba del Grado en Matem\u00e1ticas)\r\n-- 5\u00ba examen de evaluaci\u00f3n continua (16 de mayo de 2013)\r\n-- ---------------------------------------------------------------------\r\n\r\nimport Data.Array\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1. Definir la funci\u00f3n \r\n--    empiezanPorUno :: [Int] -> [Int]\r\n-- tal que (empiezanPorUno xs) es la lista de los elementos de xs que\r\n-- empiezan por uno. Por ejemplo,\r\n--    empiezanPorUno [31,12,7,143,214]  ==  [12,143]\r\n-- ---------------------------------------------------------------------\r\n\r\n-- 1\u00aa definici\u00f3n: Por comprensi\u00f3n:\r\nempiezanPorUno1 :: [Int] -> [Int]\r\nempiezanPorUno1 xs = \r\n  [x | x <- xs, head (show x) == '1']\r\n  \r\n-- 2\u00aa definici\u00f3n: Por filtrado:  \r\nempiezanPorUno2 :: [Int] -> [Int]\r\nempiezanPorUno2 xs =\r\n  filter empiezaPorUno xs\r\n  \r\nempiezaPorUno :: Int -> Bool  \r\nempiezaPorUno x =\r\n  head (show x) == '1'\r\n  \r\n-- 3\u00aa definici\u00f3n: Por recursi\u00f3n:\r\nempiezanPorUno3 :: [Int] -> [Int]\r\nempiezanPorUno3 [] = []\r\nempiezanPorUno3 (x:xs) | empiezaPorUno x = x : empiezanPorUno3 xs\r\n                       | otherwise       = empiezanPorUno3 xs\r\n  \r\n-- 4\u00aa definici\u00f3n: Por plegado:\r\nempiezanPorUno4 :: [Int] -> [Int]\r\nempiezanPorUno4 = foldr f []\r\n  where f x ys | empiezaPorUno x = x : ys\r\n               | otherwise       = ys\r\n                                   \r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2. Esta semana A. Helfgott ha publicado la primera\r\n-- demostraci\u00f3n de la conjetura d\u00e9bil de Goldbach que dice que todo\r\n-- n\u00famero impar mayor que 5 es suma de tres n\u00fameros primos (puede\r\n-- repetirse alguno).  \r\n-- \r\n-- Definir la funci\u00f3n\r\n--    sumaDe3Primos :: Int -> [(Int,Int,Int)]\r\n-- tal que (sumaDe3sPrimos n) es la lista de las distintas\r\n-- descomposiciones de n como suma de tres n\u00fameros primos. Por ejemplo, \r\n--    sumaDe3Primos 7  ==  [(2,2,3)]\r\n--    sumaDe3Primos 9  ==  [(2,2,5),(3,3,3)]\r\n-- Calcular cu\u00e1l es el menor n\u00famero que se puede escribir de m\u00e1s de 500\r\n-- formas como suma de tres n\u00fameros primos.         \r\n-- ---------------------------------------------------------------------\r\n\r\nsumaDe3Primos :: Int -> [(Int,Int,Int)]\r\nsumaDe3Primos n = \r\n    [(x,y,n-x-y) | y <- primosN, \r\n                   x <- takeWhile (<=y) primosN,\r\n                   x+y <= n,\r\n                   y <= n-x-y,\r\n                   elem (n-x-y) primosN]\r\n    where primosN = takeWhile (<=n) primos\r\n\r\n-- (esPrimo n) se verifica si n es primo.\r\nesPrimo :: Int-> Bool\r\nesPrimo n = [x | x <- [1..n], rem n x == 0] == [1,n]\r\n\r\n-- primos es la lista de los n\u00fameros primos.\r\nprimos :: [Int]\r\nprimos = [n | n <- [1..], esPrimo n]\r\n\r\n-- El c\u00e1lculo es\r\n--    ghci> head [n | n <- [1..], length (sumaDe3Primos n) > 500]\r\n--    587\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3. Los polinomios pueden representarse de forma densa. Por\r\n-- ejemplo, el polinomio 6x^4-5x^2+4x-7 se puede representar por \r\n-- [(4,6),(2,-5),(1,4),(0,-7)].  \r\n-- \r\n-- Definir la funci\u00f3n \r\n--    suma :: (Num a, Eq a) => [(Int,a)] -> [(Int,a)] -> [(Int,a)] \r\n-- tal que (suma p q) es suma de los polinomios p y q representados de\r\n-- forma densa. Por ejemplo,\r\n--    ghci> suma [(5,3),(1,2),(0,1)] [(1,6),(0,4)]\r\n--    [(5,3),(1,8),(0,5)]\r\n--    ghci> suma [(1,6),(0,4)] [(5,3),(1,2),(0,1)] \r\n--    [(5,3),(1,8),(0,5)]\r\n--    ghci> suma [(5,3),(1,2),(0,1)] [(5,-3),(1,6),(0,4)]\r\n--    [(1,8),(0,5)]\r\n--    ghci> suma [(5,3),(1,2),(0,1)] [(5,4),(1,-2),(0,4)]\r\n--    [(5,7),(0,5)]\r\n-- ---------------------------------------------------------------------\r\n\r\nsuma :: (Num a, Eq a) => [(Int,a)] -> [(Int,a)] -> [(Int,a)] \r\nsuma [] q = q\r\nsuma p [] = p\r\nsuma ((n,b):p) ((m,c):q)\r\n    | n > m      = (n,b) : suma p ((m,c):q)\r\n    | n < m      = (m,c) : suma ((n,b):p) q\r\n    | b + c == 0 = suma p q\r\n    | otherwise  = (n,b+c) : suma p q\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 4. Se define el tipo de las matrices enteras por\r\n--    type Matriz = Array (Integer,Integer) Integer \r\n-- Definir la funci\u00f3n \r\n--    borraCols :: Integer -> Integer -> Matriz -> Matriz\r\n-- tal que (borraCols j1 j2 p) es la matriz obtenida borrando las\r\n-- columnas j1 y j2 (con j1 < j2) de la matriz p. Por ejemplo,\r\n--    ghci> let p = listArray ((1,1),(2,4)) [1..8]\r\n--    ghci> p\r\n--    array ((1,1),(2,4)) [((1,1),1),((1,2),2),((1,3),3),((1,4),4),\r\n--                         ((2,1),5),((2,2),6),((2,3),7),((2,4),8)]\r\n--    ghci> borraCols 1 3 p\r\n--    array ((1,1),(2,2)) [((1,1),2),((1,2),4),((2,1),6),((2,2),8)]\r\n--    ghci> borraCols 2 3 p\r\n--    array ((1,1),(2,2)) [((1,1),1),((1,2),4),((2,1),5),((2,2),8)]\r\n-- ---------------------------------------------------------------------\r\n        \r\ntype Matriz = Array (Integer,Integer) Integer\r\n\r\n-- 1\u00aa definici\u00f3n: \r\nborraCols :: Integer -> Integer -> Matriz -> Matriz\r\nborraCols j1 j2 p = \r\n  borraCol (j2-1) (borraCol j1 p)\r\n\r\n-- (borraCol j1 p) es la matriz obtenida borrando la columna j1 de la\r\n-- matriz p. Por ejemplo,\r\n--    ghci> let p = listArray ((1,1),(2,4)) [1..8]\r\n--    ghci> borraCol 2 p\r\n--    array ((1,1),(2,3)) [((1,1),1),((1,2),3),((1,3),4),((2,1),5),((2,2),7),((2,3),8)]\r\n--    ghci> borraCol 3 p\r\n--    array ((1,1),(2,3)) [((1,1),1),((1,2),2),((1,3),4),((2,1),5),((2,2),6),((2,3),8)]\r\nborraCol :: Integer -> Matriz -> Matriz\r\nborraCol j1 p = \r\n  array ((1,1),(m,n-1))\r\n        [((i,j), f i j)| i <- [1..m], j <- [1..n-1]]\r\n  where (_,(m,n)) = bounds p\r\n        f i j | j < j1    = p!(i,j)\r\n              | otherwise = p!(i,j+1)\r\n\r\n-- 2\u00aa definici\u00f3n: \r\nborraCols2 :: Integer -> Integer -> Matriz -> Matriz\r\nborraCols2 j1 j2 p = \r\n  array ((1,1),(m,n-2))\r\n        [((i,j), f i j)| i <- [1..m], j <- [1..n-2]]\r\n  where (_,(m,n)) = bounds p\r\n        f i j | j < j1    = p!(i,j)\r\n              | j < j2-1  = p!(i,j+1)\r\n              | otherwise = p!(i,j+2)\r\n\r\n-- 3\u00aa definici\u00f3n: \r\nborraCols3 :: Integer -> Integer -> Matriz -> Matriz\r\nborraCols3 j1 j2 p = \r\n  listArray ((1,1),(n,m-2)) \r\n            [p!(i,j) | i <- [1..n], j <- [1..m], j\/=j1 &#038;&#038; j\/=j2]\r\n  where (_,(n,m)) = bounds p\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la clase de hoy de Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas se ha realizado el 5\u00ba examen de la evaluaci\u00f3n continua. A continuaci\u00f3n se muestra el examen junto con su soluci\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":[1],"tags":[270,298],"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\/3339"}],"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=3339"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/3339\/revisions"}],"predecessor-version":[{"id":3340,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/3339\/revisions\/3340"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=3339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=3339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=3339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}