{"id":3854,"date":"2013-11-20T19:45:51","date_gmt":"2013-11-20T18:45:51","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=3854"},"modified":"2013-11-25T09:55:31","modified_gmt":"2013-11-25T08:55:31","slug":"i1m2012-examen-de-la-3a-convocatoria-del-curso","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2012-examen-de-la-3a-convocatoria-del-curso\/","title":{"rendered":"I1M2012: Examen de la 3\u00aa convocatoria del curso"},"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 examen de la tercera convocatoria del curso.<\/p>\n<p>A 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-- Examen de la 3\u00ba convocatoria (20 de noviembre de 2012)\r\n-- ---------------------------------------------------------------------\r\n\r\nimport Data.List\r\nimport Data.Array\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1. [2 puntos] Definir la funci\u00f3n\r\n--    mayorProducto :: Int -> [Int] -> Int\r\n-- tal que (mayorProducto n xs) es el mayor producto de una sublista de\r\n-- xs de longitud n. Por ejemplo,\r\n--    mayorProducto 3 [3,2,0,5,4,9,1,3,7]  ==  180\r\n-- ya que de todas las sublistas de longitud 3 de [3,2,0,5,4,9,1,3,7] la\r\n-- que tiene mayor producto es la [5,4,9] cuyo producto es 180.\r\n-- ---------------------------------------------------------------------          \r\n          \r\nmayorProducto :: Int -> [Int] -> Int\r\nmayorProducto n cs \r\n    | length cs < n = 1\r\n    | otherwise     = maximum [product xs | xs <- segmentos n cs]\r\n   where segmentos n cs = [take n xs | xs <- tails cs]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2. Definir la funci\u00f3n\r\n--    sinDobleCero :: Int -> [[Int]]\r\n-- tal que (sinDobleCero n) es la lista de las listas de longitud n\r\n-- formadas por el 0 y el 1 tales que no contiene dos ceros\r\n-- consecutivos. Por ejemplo,\r\n--    ghci> sinDobleCero 2\r\n--    [[1,0],[1,1],[0,1]]\r\n--    ghci> sinDobleCero 3\r\n--    [[1,1,0],[1,1,1],[1,0,1],[0,1,0],[0,1,1]]\r\n--    ghci> sinDobleCero 4\r\n--    [[1,1,1,0],[1,1,1,1],[1,1,0,1],[1,0,1,0],[1,0,1,1],\r\n--     [0,1,1,0],[0,1,1,1],[0,1,0,1]]\r\n-- ---------------------------------------------------------------------\r\n\r\nsinDobleCero :: Int -> [[Int]]\r\nsinDobleCero 0 = [[]]\r\nsinDobleCero 1 = [[0],[1]]\r\nsinDobleCero n = [1:xs | xs <- sinDobleCero (n-1)] ++\r\n                 [0:1:ys | ys <- sinDobleCero (n-2)]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3. [2 puntos] La sucesi\u00f3n A046034 de la OEIS (The On-Line\r\n-- Encyclopedia of Integer Sequences) est\u00e1 formada por los n\u00fameros tales\r\n-- que todos sus d\u00edgitos son primos. Los primeros t\u00e9rminos de A046034\r\n-- son \r\n--    2,3,5,7,22,23,25,27,32,33,35,37,52,53,55,57,72,73,75,77,222,223\r\n-- \r\n-- Definir la constante\r\n--    numerosDigitosPrimos :: [Int]\r\n-- cuyos elementos son los t\u00e9rminos de la sucesi\u00f3n A046034. Por ejemplo,\r\n--    ghci> take 22 numerosDigitosPrimos\r\n--    [2,3,5,7,22,23,25,27,32,33,35,37,52,53,55,57,72,73,75,77,222,223]\r\n-- \u00bfCu\u00e1ntos elementos hay en la sucesi\u00f3n menores que 2013?\r\n-- ---------------------------------------------------------------------\r\n\r\nnumerosDigitosPrimos :: [Int]\r\nnumerosDigitosPrimos = \r\n    [n | n <- [2..], digitosPrimos n]\r\n\r\n-- (digitosPrimos n) se verifica si todos los d\u00edgitos de n son\r\n-- primos. Por ejemplo,\r\n--    digitosPrimos 352  ==  True\r\n--    digitosPrimos 362  ==  False\r\ndigitosPrimos :: Int -> Bool\r\ndigitosPrimos n = all (`elem` \"2357\") (show n)\r\n\r\n-- 2\u00aa definici\u00f3n de digitosPrimos:\r\ndigitosPrimos2 :: Int -> Bool\r\ndigitosPrimos2 n = subconjunto (cifras n) [2,3,5,7]\r\n\r\n-- (cifras n) es la lista de las cifras de n. Por ejemplo,\r\ncifras :: Int -> [Int]\r\ncifras n = [read [x] | x <-show n]\r\n\r\n-- (subconjunto xs ys) se verifica si xs es un subconjunto de ys. Por\r\n-- ejemplo, \r\nsubconjunto :: Eq a => [a] -> [a] -> Bool\r\nsubconjunto xs ys = and [elem x ys | x <- xs]\r\n\r\n-- El c\u00e1lculo es\r\n--    ghci> length (takeWhile (<2013) numerosDigitosPrimos)\r\n--    84\r\n\r\n-- ----------------------------------------------------------------------\r\n-- Ejercicio 4. [2 puntos] Entre dos matrices de la misma dimensi\u00f3n se\r\n-- puede aplicar distintas operaciones binarias entre los elementos en\r\n-- la misma posici\u00f3n. Por ejemplo, si a y b son las matrices\r\n--    |3 4 6|     |1 4 2|\r\n--    |5 6 7|     |2 1 2|\r\n-- entonces a+b y a-b son, respectivamente\r\n--    |4 8 8|     |2 0 4|\r\n--    |7 7 9|     |3 5 5|\r\n-- \r\n-- Las matrices enteras se pueden representar mediante tablas con\r\n-- \u00edndices enteros: \r\n--    type Matriz = Array (Int,Int) Int\r\n-- y las matrices anteriores se definen por\r\n--    a, b :: Matriz\r\n--    a = listArray ((1,1),(2,3)) [3,4,6,5,6,7]\r\n--    b = listArray ((1,1),(2,3)) [1,4,2,2,1,2]\r\n-- \r\n-- Definir la funci\u00f3n\r\n--    opMatriz :: (Int -> Int -> Int) -> Matriz -> Matriz -> Matriz\r\n-- tal que (opMatriz f p q) es la matriz obtenida aplicando la operaci\u00f3n\r\n-- f entre los elementos de p y q de la misma posici\u00f3n. Por ejemplo,\r\n--    ghci> opMatriz (+) a b\r\n--    array ((1,1),(2,3)) [((1,1),4),((1,2),8),((1,3),8),\r\n--                         ((2,1),7),((2,2),7),((2,3),9)]\r\n--    ghci> opMatriz (-) a b\r\n--    array ((1,1),(2,3)) [((1,1),2),((1,2),0),((1,3),4),\r\n--                         ((2,1),3),((2,2),5),((2,3),5)]\r\n-- --------------------------------------------------------------------- \r\n\r\ntype Matriz = Array (Int,Int) Int\r\n\r\na, b :: Matriz\r\na = listArray ((1,1),(2,3)) [3,4,6,5,6,7]\r\nb = listArray ((1,1),(2,3)) [1,4,2,2,1,2]\r\n\r\n-- 1\u00aa definici\u00f3n\r\nopMatriz :: (Int -> Int -> Int) -> Matriz -> Matriz -> Matriz\r\nopMatriz f p q = \r\n    array ((1,1),(m,n)) [((i,j), f (p!(i,j)) (q!(i,j)))\r\n                      | i <- [1..m], j <- [1..n]] \r\n    where (_,(m,n)) = bounds p\r\n\r\n-- 2\u00aa definici\u00f3n\r\nopMatriz2 :: (Int -> Int -> Int) -> Matriz -> Matriz -> Matriz\r\nopMatriz2 f p q = \r\n    listArray (bounds p) [f x y | (x,y) <- zip (elems p) (elems q)]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 5. [2 puntos] Las expresiones aritm\u00e9ticas se pueden definir\r\n-- usando el siguiente tipo de datos\r\n--    data Expr = N Int \r\n--              | X \r\n--              | S Expr Expr \r\n--              | R Expr Expr \r\n--              | P Expr Expr \r\n--              | E Expr Int\r\n--              deriving (Eq, Show)\r\n-- Por ejemplo, la expresi\u00f3n \r\n--    3*x - (x+2)^7\r\n-- se puede definir por\r\n--    R (P (N 3) X) (E (S X (N 2)) 7)\r\n-- \r\n-- Definir la funci\u00f3n  \r\n--    maximo :: Expr -> [Int] -> (Int,[Int])\r\n-- tal que (maximo e xs) es el par formado por el m\u00e1ximo valor de la\r\n-- expresi\u00f3n e para los puntos de xs y en qu\u00e9 puntos alcanza el\r\n-- m\u00e1ximo. Por ejemplo, \r\n--    ghci> maximo (E (S (N 10) (P (R (N 1) X) X)) 2) [-3..3]\r\n--    (100,[0,1])\r\n-- ---------------------------------------------------------------------\r\n\r\ndata Expr = N Int \r\n          | X \r\n          | S Expr Expr \r\n          | R Expr Expr \r\n          | P Expr Expr \r\n          | E Expr Int\r\n          deriving (Eq, Show)\r\n\r\nmaximo :: Expr -> [Int] -> (Int,[Int])\r\nmaximo e ns = (m,[n | n <- ns, valor e n == m])  \r\n    where m = maximum [valor e n | n <- ns]\r\n\r\nvalor :: Expr -> Int -> Int\r\nvalor (N x) _ = x\r\nvalor X     n = n\r\nvalor (S e1 e2) n = (valor e1 n) + (valor e2 n)\r\nvalor (R e1 e2) n = (valor e1 n) - (valor e2 n)\r\nvalor (P e1 e2) n = (valor e1 n) * (valor e2 n)\r\nvalor (E e  m ) n = (valor e  n)^m\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 examen de la tercera convocatoria del curso. A continuaci\u00f3n se muestra el examen junto con su soluci\u00f3n:<\/p>\n","protected":false},"author":2,"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":[197],"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\/3854"}],"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=3854"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/3854\/revisions"}],"predecessor-version":[{"id":3855,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/3854\/revisions\/3855"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=3854"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=3854"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=3854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}