<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?action=history&amp;feed=atom&amp;title=Examen_21%2F06%2F21</id>
	<title>Examen 21/06/21 - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?action=history&amp;feed=atom&amp;title=Examen_21%2F06%2F21"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_21/06/21&amp;action=history"/>
	<updated>2026-07-20T12:53:33Z</updated>
	<subtitle>Historial de revisiones de esta página en el wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_21/06/21&amp;diff=444&amp;oldid=prev</id>
		<title>Mdelamor: Protegió «Examen 21/06/21» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_21/06/21&amp;diff=444&amp;oldid=prev"/>
		<updated>2021-11-17T22:17:45Z</updated>

		<summary type="html">&lt;p&gt;Protegió «&lt;a href=&quot;/WIKIS/I1M2021G2/index.php/Examen_21/06/21&quot; title=&quot;Examen 21/06/21&quot;&gt;Examen 21/06/21&lt;/a&gt;» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revisión del 22:17 17 nov 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;es&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Sin diferencias)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mdelamor</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_21/06/21&amp;diff=443&amp;oldid=prev</id>
		<title>Mdelamor: Página creada con «&lt;source lang=&#039;haskell&#039;&gt;  -- Informática (1º del Grado en Matemáticas) -- 4º examen de evaluación continua (21 de junio de 2021)       Grupos A, B y C -- ==============…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_21/06/21&amp;diff=443&amp;oldid=prev"/>
		<updated>2021-11-17T22:17:38Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;  -- Informática (1º del Grado en Matemáticas) -- 4º examen de evaluación continua (21 de junio de 2021)       Grupos A, B y C -- ==============…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- Informática (1º del Grado en Matemáticas)&lt;br /&gt;
-- 4º examen de evaluación continua (21 de junio de 2021)       Grupos A, B y C&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
&lt;br /&gt;
-- Nombre:&lt;br /&gt;
--&lt;br /&gt;
-- Apellidos:&lt;br /&gt;
--&lt;br /&gt;
-- UVUS:&lt;br /&gt;
&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
&lt;br /&gt;
import qualified Data.Vector as V&lt;br /&gt;
import qualified Data.Array as A&lt;br /&gt;
import Data.Numbers.Primes&lt;br /&gt;
-- Selecciona de estas dos librerías la que hayas utilizado en clase&lt;br /&gt;
import GrafoConMatrizDeAdyacencia&lt;br /&gt;
-- import I1M.Grafo&lt;br /&gt;
&lt;br /&gt;
import Data.List&lt;br /&gt;
&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
-- Ejercicio 1. (2.5 ptos) El complemento de un número positivo N se calcula&lt;br /&gt;
-- por el siguiente rocedimiento:&lt;br /&gt;
--   Si N es mayor que 9, se toma cada dígito por su valor posicional y se&lt;br /&gt;
--   resta del mayor los otros dígitos. Por ejemplo, el complemento de 1448 es&lt;br /&gt;
--   1000 - 400 - 40 - 8 = 552. Cuando N es menor que 10, su complemento es N.&lt;br /&gt;
--&lt;br /&gt;
-- Definir las funciones&lt;br /&gt;
--   cadena    :: Integer -&amp;gt; [Integer]&lt;br /&gt;
--   conCadena :: Int -&amp;gt; [Integer]&lt;br /&gt;
-- tales que&lt;br /&gt;
-- + &amp;#039;(cadena n)&amp;#039; es la cadena de primos a partir del número &amp;#039;n&amp;#039; tal que cada&lt;br /&gt;
--   uno es el complemento del anterior. Por ejemplo,&lt;br /&gt;
--      cadena 8         == []&lt;br /&gt;
--      cadena 7         == [7]&lt;br /&gt;
--      cadena 13        == [13,7]&lt;br /&gt;
--      cadena 643       == [643,557,443]&lt;br /&gt;
--      cadena 18127     == [18127,1873,127,73,67,53,47]&lt;br /&gt;
--      cadena 18181213  == [18181213,1818787,181213,18787,1213,787,613,587]&lt;br /&gt;
-- + &amp;#039;(conCadena n)&amp;#039; es la lista de números cuyas cadenas tienen &amp;#039;n&amp;#039;&lt;br /&gt;
--   elementos. Por ejemplo,&lt;br /&gt;
--      take 6 (conCadena 3)                == [23,31,61,67,103,307]&lt;br /&gt;
--      [head (conCadena n) | n &amp;lt;- [4..8]]  == [37,43,157,18127,181873]&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
complemento :: Integer -&amp;gt; Integer&lt;br /&gt;
complemento n =&lt;br /&gt;
  let c = 10^(length (show n)-1)&lt;br /&gt;
  in (div n c)*c - (mod n c)&lt;br /&gt;
&lt;br /&gt;
cadena :: Integer -&amp;gt; [Integer]&lt;br /&gt;
cadena n&lt;br /&gt;
  | n &amp;lt; 10 &amp;amp;&amp;amp; isPrime n = [n]&lt;br /&gt;
  | isPrime n = n : cadena (complemento n)&lt;br /&gt;
  | otherwise = []&lt;br /&gt;
&lt;br /&gt;
conCadena :: Int -&amp;gt; [Integer]&lt;br /&gt;
conCadena n =&lt;br /&gt;
  filter ((==n).length.cadena) primes&lt;br /&gt;
&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
-- Ejercicio 2. (2.5 puntos) Un número es innombrable si es divisible por 7 o&lt;br /&gt;
-- alguno de sus dígitos es un 7. Un juego infantil consiste en contar&lt;br /&gt;
-- saltándose los números innombrables:&lt;br /&gt;
--   1 2 3 4 5 6 ( ) 8 9 10 11 12 13 ( ) 15 16 ( ) 18 ...&lt;br /&gt;
--&lt;br /&gt;
-- La sucesión de Cantor se obtiene llenando los huecos de la sucesión&lt;br /&gt;
-- anterior con la propia sucesión:&lt;br /&gt;
--   1 2 3 4 5 6 (1) 8 9 10 11 12 13 (2) 15 16 (3) 18 19 20 (4) 22 23&lt;br /&gt;
--   24 25 26 (5) (6) 29 30 31 32 33 34 (1) 36 (8) 38 39 40 41  (9) 43&lt;br /&gt;
--   44 45 46 (10) 48 (11) 50 51 52 53 54 55 (12) (13) 58 59 60 61 62&lt;br /&gt;
--   (2) 64 65 66 (15) 68 69 (16) (3) (18) (19) (20) (4) (22) (23) (24)&lt;br /&gt;
--   (25) 80 81 82 83 (26) 85 86 (5) 88 89 90 (6) 92 93 94 95 96 (29)&lt;br /&gt;
--   (30) 99 100&lt;br /&gt;
--&lt;br /&gt;
-- Definir la lista&lt;br /&gt;
--   sucCantor :: [Integer]&lt;br /&gt;
-- cuyo valor es la sucesión de Cantor. Por ejemplo,&lt;br /&gt;
--   take 100 sucCantor  ==&lt;br /&gt;
--     [1,2,3,4,5,6, 1 ,8,9,10,11,12,13, 2 ,15,16, 3 ,18,19,20, 4 ,22,23,&lt;br /&gt;
--      24,25,26, 5,6 ,29,30,31,32,33,34, 1 ,36, 8 ,38,39,40,41, 9 ,43,44,&lt;br /&gt;
--      45,46, 10 ,48, 11 ,50,51,52,53,54,55, 12,13 ,58,59,60,61,62, 2 ,64,&lt;br /&gt;
--      65,66, 15 ,68,69, 16,3,18,19,20,4,22,23,24,25, 80,81,82,83, 26 ,85,&lt;br /&gt;
--      86, 5 ,88,89,90, 6 ,92,93,94,95,96, 29,30 ,99,100]&lt;br /&gt;
--    sucCantor !! (5+10^6)  ==  544480&lt;br /&gt;
--    sucCantor !! (6+10^6)  ==  266086&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
&lt;br /&gt;
sucCantor :: [Integer]&lt;br /&gt;
sucCantor =&lt;br /&gt;
  mezclaCantor [1..] sucCantor&lt;br /&gt;
&lt;br /&gt;
mezclaCantor :: [Integer] -&amp;gt; [Integer] -&amp;gt; [Integer]&lt;br /&gt;
mezclaCantor (x:xs) ys =&lt;br /&gt;
  if x`mod`7 == 0 || elem &amp;#039;7&amp;#039; (show x)&lt;br /&gt;
  then (head ys) : mezclaCantor xs (tail ys)&lt;br /&gt;
  else x : mezclaCantor xs ys&lt;br /&gt;
&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
-- Ejercicio 3. (2.5 ptos) Consideremos grafos en los que cada arista está&lt;br /&gt;
-- etiquetada con un valor que representa un color (en lugar de un peso). Un&lt;br /&gt;
-- camino alternado en este tipo de grafos es un camino que no pasa por dos&lt;br /&gt;
-- aristas consecutivas del mismo color.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--   caminoAlternado :: (A.Ix v, Num p, Eq p) =&amp;gt; Grafo v p -&amp;gt; [v] -&amp;gt; Bool&lt;br /&gt;
-- tal que &amp;#039;(caminoAlternado g vs)&amp;#039; comprueba que la secuencia de nodos &amp;#039;vs&amp;#039;&lt;br /&gt;
-- del grafo &amp;#039;g&amp;#039;, forma un camino alternado en el grafo. Por ejemplo,&lt;br /&gt;
--   caminoAlternado grafo [1,2,4,3,5]  ==  True&lt;br /&gt;
--   caminoAlternado grafo [3,1,2,4,6]  ==  False&lt;br /&gt;
-- donde &amp;#039;grafo&amp;#039; es el grafo que se define a continuación (selecciona de las&lt;br /&gt;
-- siguientes definiciones de grafos la que hayas utilizado en clase):&lt;br /&gt;
&lt;br /&gt;
-- grafo :: Grafo Int Int      &lt;br /&gt;
-- grafo = creaGrafo ND (1,6) [(1,2,3),(1,3,1),(1,5,1),(3,5,2),&lt;br /&gt;
--                             (2,4,1),(2,6,2),(3,4,3),(4,6,1)]&lt;br /&gt;
&lt;br /&gt;
-- grafo :: Grafo Int Int&lt;br /&gt;
-- grafo = asignaPesos (creaGrafo ND (1,6) [(1,2),(1,3),(1,5),(3,5),&lt;br /&gt;
--                                          (2,4),(2,6),(3,4),(4,6)])&lt;br /&gt;
--                     [((1,2),3),((1,3),1),((1,5),1),((3,5),2),&lt;br /&gt;
--                      ((2,4),1),((2,6),2),((3,4),3),((4,6),1)]&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
caminoAlternado :: (A.Ix v, Num p, Eq p) =&amp;gt; Grafo v p -&amp;gt; [v] -&amp;gt; Bool&lt;br /&gt;
caminoAlternado g vs =&lt;br /&gt;
  let as = zip vs (tail vs)&lt;br /&gt;
  in (all (aristaEn g) as) &amp;amp;&amp;amp; -- vs es un camino en g&lt;br /&gt;
     (and [peso g a1 /= peso g a2 | (a1,a2) &amp;lt;- zip as (tail as)])&lt;br /&gt;
&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
-- Ejercicio 4. (2.5 ptos) En una rejilla de 2xN cuadros de longitud se pueden&lt;br /&gt;
-- colocar de distintas formas piezas de 2 cuadros de longitud, en horizontal y&lt;br /&gt;
-- vertical, de forma que no quede espacio libre en la rejilla. Por ejemplo,&lt;br /&gt;
-- una rejilla de 2x12 cuadros de longitud se puede rellenar de la siguiente&lt;br /&gt;
-- forma: &lt;br /&gt;
--&lt;br /&gt;
--    ╔═══╦═╦═╦═╦═══╦═══╦═╦═══╗&lt;br /&gt;
--    ╠═══╣ ║ ║ ╠═══╬═══╣ ╠═══╣&lt;br /&gt;
--    ╚═══╩═╩═╩═╩═══╩═══╩═╩═══╝&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--   rejillas2N :: Int -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
-- tal que &amp;#039;(rejillas2N n m)&amp;#039; es el número de formas distintas de rellenar una&lt;br /&gt;
-- rejilla de &amp;#039;2xn&amp;#039; cuadros de longitud con piezas de 2 cuadros de longitud de&lt;br /&gt;
-- &amp;#039;m&amp;#039; colores distintos, calculado mediante la técnica de programación&lt;br /&gt;
-- dinámica. Tened en cuenta que no hay ninguna restricción acerca de cómo&lt;br /&gt;
-- colocar las piezas de distintos colores. Por ejemplo, &lt;br /&gt;
--   rejillas2N 2 2   ==  8&lt;br /&gt;
--   rejillas2N 2 3   ==  18&lt;br /&gt;
--   rejillas2N 3 2   ==  24&lt;br /&gt;
--   rejillas2N 3 3   ==  81&lt;br /&gt;
--   rejillas2N 20 5  ==  1043891906738281250&lt;br /&gt;
--   length (show (rejillas2N 100 7))   ==  106&lt;br /&gt;
--   length (show (rejillas2N 1000 9))  ==  1164&lt;br /&gt;
-- ----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- rejillas2N n m =&lt;br /&gt;
--   m * (rejillas2N (n-1) m) + m^2 * (rejillas2N (n-2) m)&lt;br /&gt;
&lt;br /&gt;
-- Versión recursiva&lt;br /&gt;
&lt;br /&gt;
rejillas2NR :: Int -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
rejillas2NR 0 m = 1&lt;br /&gt;
rejillas2NR 1 m = m&lt;br /&gt;
rejillas2NR n m =&lt;br /&gt;
  m * (rejillas2NR (n-1) m) + m^2 * (rejillas2NR (n-2) m)&lt;br /&gt;
&lt;br /&gt;
-- Versión usando programación dinámica&lt;br /&gt;
    &lt;br /&gt;
rejillas2N :: Int -&amp;gt; Integer -&amp;gt; Integer&lt;br /&gt;
rejillas2N n m =&lt;br /&gt;
  let v = V.generate (n+1) (\ i -&amp;gt; generaRejillas2N v m i)&lt;br /&gt;
  in v V.! n&lt;br /&gt;
&lt;br /&gt;
generaRejillas2N :: V.Vector Integer -&amp;gt; Integer -&amp;gt; Int -&amp;gt; Integer&lt;br /&gt;
generaRejillas2N v m 0 = 1&lt;br /&gt;
generaRejillas2N v m 1 = m&lt;br /&gt;
generaRejillas2N v m i =&lt;br /&gt;
  m * (v V.! (i-1)) + m^2 * (v V.! (i-2))&lt;br /&gt;
&lt;br /&gt;
-- ============================================================================&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdelamor</name></author>
	</entry>
</feed>