<?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=Parcial_1_Sol</id>
	<title>Parcial 1 Sol - 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=Parcial_1_Sol"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Parcial_1_Sol&amp;action=history"/>
	<updated>2026-07-18T00:17:14Z</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=Parcial_1_Sol&amp;diff=408&amp;oldid=prev</id>
		<title>Mdelamor: Protegió «Parcial 1 Sol» ([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=Parcial_1_Sol&amp;diff=408&amp;oldid=prev"/>
		<updated>2021-11-12T14:59:25Z</updated>

		<summary type="html">&lt;p&gt;Protegió «&lt;a href=&quot;/WIKIS/I1M2021G2/index.php/Parcial_1_Sol&quot; title=&quot;Parcial 1 Sol&quot;&gt;Parcial 1 Sol&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 14:59 12 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=Parcial_1_Sol&amp;diff=407&amp;oldid=prev</id>
		<title>Mdelamor: Página creada con «&lt;source lang=&#039;haskell&#039;&gt;  -- ----------------------------------------------------------------------------- -- Informática de 1º de Grado en Matemáticas. Grupo 2. -- Exame…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Parcial_1_Sol&amp;diff=407&amp;oldid=prev"/>
		<updated>2021-11-12T14:59:15Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;  -- ----------------------------------------------------------------------------- -- Informática de 1º de Grado en Matemáticas. Grupo 2. -- Exame…»&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;
-- -----------------------------------------------------------------------------&lt;br /&gt;
-- Informática de 1º de Grado en Matemáticas. Grupo 2.&lt;br /&gt;
-- Examen 1 de evaluación alternativa (12 de noviembre 2021).&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import Data.Char&lt;br /&gt;
&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1.1. Un número imparitario es aquel que tiene una cantidad impar&lt;br /&gt;
-- de cifras pares y una cantidad par de cifras impares. Por ejemplo, 235 es&lt;br /&gt;
-- imparitario porque tiene 1 par (el 2) y 2 impares (el 3 y 5). De igual forma,&lt;br /&gt;
-- 101, 103, 105, 107, 291, 14238 y 1106871 son imparitarios, mientras que 21,&lt;br /&gt;
-- 2468 y 11258 no lo son.&lt;br /&gt;
--&lt;br /&gt;
-- Define la función (numeroImparitario n), tal que indique si un número n&lt;br /&gt;
-- es imparitario. Por ejemplo,&lt;br /&gt;
--   λ&amp;gt; numeroImparitario 103      == True&lt;br /&gt;
--   λ&amp;gt; numeroImparitario 291      == True&lt;br /&gt;
--   λ&amp;gt; numeroImparitario 1106871  == True&lt;br /&gt;
--   λ&amp;gt; numeroImparitario 21       == False&lt;br /&gt;
--   λ&amp;gt; numeroImparitario 2468     == False&lt;br /&gt;
--   λ&amp;gt; numeroImparitario 11358    == True&lt;br /&gt;
--   λ&amp;gt; numeroImparitario 11258    == False&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
numeroImparitario :: Integer -&amp;gt; Bool&lt;br /&gt;
numeroImparitario n = odd p &amp;amp;&amp;amp; even i&lt;br /&gt;
  where cs = show n&lt;br /&gt;
        p = sum [1 | c &amp;lt;- cs, elem c &amp;quot;02468&amp;quot;]&lt;br /&gt;
        i = sum [1 | c &amp;lt;- cs, elem c &amp;quot;13579&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
cifras :: Integer -&amp;gt; [Int]&lt;br /&gt;
cifras x = [read [c] | c &amp;lt;- show x]&lt;br /&gt;
&lt;br /&gt;
numeroImparitario&amp;#039; :: Integer -&amp;gt; Bool&lt;br /&gt;
numeroImparitario&amp;#039; n = odd p &amp;amp;&amp;amp; even i&lt;br /&gt;
  where cs = cifras n&lt;br /&gt;
        p = sum [1 | c &amp;lt;- cs, even c]&lt;br /&gt;
        i = sum [1 | c &amp;lt;- cs, odd c]&lt;br /&gt;
&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1.2. Comprueba con QuickCheck que si n es un número positivo&lt;br /&gt;
-- de más de tres cifras e imparitario, m también es imparitario, donde&lt;br /&gt;
-- m es n+3, si la última cifra de n es 8 o 9, o n+2, en otro caso. Por ejemplo,&lt;br /&gt;
-- son imparitarios 291 y 291+2=293, 299 y 299+3=301, y 358 y 358+3=361.&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
prop_imparitario :: Integer -&amp;gt; Property&lt;br /&gt;
prop_imparitario x = numeroImparitario n ==&amp;gt; numeroImparitario n&amp;#039;&lt;br /&gt;
  where n&amp;#039; = if rem n 10 == 9 || rem n 10 == 8 then n+3 else n+2&lt;br /&gt;
        n = 100 + abs x&lt;br /&gt;
&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Representaremos la agenda de nuestras asignaturas como sigue:&lt;br /&gt;
-- una lista de tuplas con primera componente el nombre abreviado de la&lt;br /&gt;
-- asignatura, y segunda componente una lista de ternas, donde cada&lt;br /&gt;
-- terna indica un día y un rago de horario representado como un entero (por&lt;br /&gt;
-- ejemplo, 900 es 9:00, 1130 es 11:30, etc.)&lt;br /&gt;
&lt;br /&gt;
agenda :: [(String,[(String,Int,Int)])]&lt;br /&gt;
agenda = [ (&amp;quot;Inf&amp;quot;,[(&amp;quot;Mie&amp;quot;,900,1100),(&amp;quot;Vie&amp;quot;,900,1100)]),&lt;br /&gt;
           (&amp;quot;Alg&amp;quot;,[(&amp;quot;Mie&amp;quot;,1130,1330),(&amp;quot;Ju&amp;quot;,1130,1330)]),&lt;br /&gt;
           (&amp;quot;Fis&amp;quot;,[(&amp;quot;Lu&amp;quot;,900,1100),(&amp;quot;Mar&amp;quot;,900,1100)]),&lt;br /&gt;
           (&amp;quot;Cal&amp;quot;,[(&amp;quot;Lu&amp;quot;,1130,1330),(&amp;quot;Ju&amp;quot;,900,1100)]),&lt;br /&gt;
           (&amp;quot;Est&amp;quot;,[(&amp;quot;Mar&amp;quot;,1130,1330),(&amp;quot;Vie&amp;quot;,900,1100)]) ]&lt;br /&gt;
&lt;br /&gt;
-- Define la función (asignatura ds h as), tal que devuelva la lista de&lt;br /&gt;
-- asignaturas donde debemos estar el día ds a las h horas, según la agenda&lt;br /&gt;
-- as. Si estamos en el descanso o no hay asignaturas, devolver la lista&lt;br /&gt;
-- vacía. El nombre abreviado del día a buscar no debe diferenciar entre&lt;br /&gt;
-- minúsculas y mayúsculas (es decir, &amp;quot;lu&amp;quot; es igual que &amp;quot;Lu&amp;quot;). Por ejemplo,&lt;br /&gt;
--    λ&amp;gt; asignatura &amp;quot;Lu&amp;quot; 930 agenda&lt;br /&gt;
--       [&amp;quot;Fis&amp;quot;]&lt;br /&gt;
--    λ&amp;gt; asignatura &amp;quot;lu&amp;quot; 945 agenda&lt;br /&gt;
--       [&amp;quot;Fis&amp;quot;]&lt;br /&gt;
--    λ&amp;gt; asignatura &amp;quot;Vie&amp;quot; 930 agenda&lt;br /&gt;
--       [&amp;quot;Inf&amp;quot;,&amp;quot;Est&amp;quot;]&lt;br /&gt;
--    λ&amp;gt; asignatura &amp;quot;Mar&amp;quot; 1115 agenda&lt;br /&gt;
--       []&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
asignatura :: String -&amp;gt; Int -&amp;gt; [(String,[(String,Int,Int)])] -&amp;gt; [String]&lt;br /&gt;
asignatura ds h as = [ ns | (ns,hs) &amp;lt;- as, (ds&amp;#039;,h1,h2) &amp;lt;- hs, (minusculas ds&amp;#039;) == (minusculas ds), h1 &amp;lt;= h, h2 &amp;gt;= h ]&lt;br /&gt;
  where minusculas xs = [toLower x | x &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. Dos vectores son más compatibles cuanto mayor sea su producto&lt;br /&gt;
-- escalar (hasta llegar a ser paralelos). Representaremos los vectores como&lt;br /&gt;
-- listas de números. Define la función (masCompatibles xs yss), tal que dado&lt;br /&gt;
-- un vector xs y una lista de vectores yss, devuelva la lista de los vectores&lt;br /&gt;
-- más compatibles de yss respecto de xs. Por ejemplo&lt;br /&gt;
--   λ&amp;gt; masCompatibles [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[3,1,0]]&lt;br /&gt;
--      [[2,3,1],[3,1,0]]&lt;br /&gt;
--   λ&amp;gt; masCompatibles [1,0,1] [[0,1,0], [2,3,1], [-1,7,1],[4,-1,4]]&lt;br /&gt;
--      [[4,-1,4]]&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
masCompatibles :: (Ord a,Num a) =&amp;gt; [a] -&amp;gt; [[a]] -&amp;gt; [[a]]&lt;br /&gt;
masCompatibles xs yss = [ys | ys &amp;lt;-yss, productoEscalar xs ys == m]&lt;br /&gt;
  where m = maximum productos&lt;br /&gt;
        productos = [productoEscalar xs ys | ys &amp;lt;- yss]&lt;br /&gt;
        productoEscalar xs ys = sum [x*y | (x,y) &amp;lt;- zip xs ys]&lt;br /&gt;
&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1 Definir, por comprensión, la función (coincidenciasC k xs ys),&lt;br /&gt;
-- tal que verifique si las listas xs e ys coinciden en, al menos, k de sus&lt;br /&gt;
-- posiciones. Por ejemplo,&lt;br /&gt;
--    λ&amp;gt; coincidenciasC 7 &amp;quot;salamanca&amp;quot; &amp;quot;salamandra&amp;quot;  ==  True&lt;br /&gt;
--    λ&amp;gt; coincidenciasC 2 [1,2,3,4,5] [1,3,3,8,1]   ==  True&lt;br /&gt;
--    λ&amp;gt; coincidenciasC 4 &amp;quot;almendra&amp;quot; &amp;quot;almazara&amp;quot;     ==  True&lt;br /&gt;
--    λ&amp;gt; coincidenciasC 6 &amp;quot;almendra&amp;quot; &amp;quot;almazara&amp;quot;     ==  False&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
coincidenciasC :: Eq a =&amp;gt; Int -&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
coincidenciasC n xs ys = sum [1 | (x,y) &amp;lt;- zip xs ys, x==y] &amp;gt;= n&lt;br /&gt;
&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2 Definir, por recursión, la función (coincidencias k xs ys),&lt;br /&gt;
-- tal que verifique si las listas xs e ys coinciden en, al menos, k de sus&lt;br /&gt;
-- posiciones. Por ejemplo,&lt;br /&gt;
--    λ&amp;gt; coincidenciasR 7 &amp;quot;salamanca&amp;quot; &amp;quot;salamandra&amp;quot;  ==  True&lt;br /&gt;
--    λ&amp;gt; coincidenciasR 2 [1,2,3,4,5] [1,3,3,8,1]   ==  True&lt;br /&gt;
--    λ&amp;gt; coincidenciasR 4 &amp;quot;almendra&amp;quot; &amp;quot;almazara&amp;quot;     ==  True&lt;br /&gt;
--    λ&amp;gt; coincidenciasR 6 &amp;quot;almendra&amp;quot; &amp;quot;almazara&amp;quot;     ==  False&lt;br /&gt;
-- -----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
coincidenciasR :: Eq a =&amp;gt; Int -&amp;gt; [a] -&amp;gt; [a] -&amp;gt; Bool&lt;br /&gt;
coincidenciasR 0 _ _                       = True&lt;br /&gt;
coincidenciasR n [] _                      = False&lt;br /&gt;
coincidenciasR n _ []                      = False&lt;br /&gt;
coincidenciasR n (x:xs) (y:ys) | x == y    = coincidenciasR (n-1) xs ys&lt;br /&gt;
                               | otherwise = coincidenciasR n xs ys&lt;br /&gt;
&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>