Acciones

Diferencia entre revisiones de «Relación 1»

De Informática de 1º de Matemáticas [Curso 2021-22, Grupo 2]

Línea 27: Línea 27:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez
-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
media3 x y z = (x+y+z)/3
media3 x y z = (x+y+z)/3
-- Antonio López García, César Fornis Catalán
-- Antonio López García, César Fornis Catalán
Línea 46: Línea 46:
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez
-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García
Línea 58: Línea 58:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez
-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
  volumenEsfera r = (4/3)*pi*r^3
  volumenEsfera r = (4/3)*pi*r^3
-- Adolfo Sagrera Vivancos, Carmen Blanco
-- Adolfo Sagrera Vivancos, Carmen Blanco
Línea 77: Línea 77:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres
--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez
Línea 96: Línea 96:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez
--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
ultimaCifra x = rem x 10
ultimaCifra x = rem x 10


Línea 117: Línea 117:
-- Antonio López García, Lucía González, Carmen Blanco
-- Antonio López García, Lucía González, Carmen Blanco
maxTres x y z = maximum [x,y,z]
maxTres x y z = maximum [x,y,z]
--César Fornis Catalán, José Manuel García
--César Fornis Catalán, José Manuel García, Elsa Domínguez
maxTres x y z = max(max x y) z
maxTres x y z = max (max x y) z
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista
Línea 126: Línea 126:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez
--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
rota1 xs = tail xs ++ [head xs]
rota1 xs = tail xs ++ [head xs]
-- Antonio López García
-- Antonio López García
Línea 140: Línea 140:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez
-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
rota n xs = drop n xs ++ take n xs
rota n xs = drop n xs ++ take n xs


Línea 153: Línea 153:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo  
-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez
rango xs = [minimum xs] ++ [maximum xs]
rango xs = [minimum xs] ++ [maximum xs]
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez
Línea 165: Línea 165:
--    palindromo [3,2,5,6,2,3]  ==  False
--    palindromo [3,2,5,6,2,3]  ==  False
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez
palindromo xs = xs == reverse xs
palindromo xs = xs == reverse xs
--Iván García Rodríguez
--Iván García Rodríguez
Línea 181: Línea 181:
--Laura Arango
--Laura Arango
interior xs = drop 1 (init xs)
interior xs = drop 1 (init xs)
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
interior xs = init (tail xs)
interior xs = init (tail xs)
--Manuel Alcaide García
--Manuel Alcaide García
Línea 201: Línea 201:
finales n xs = drop m xs
finales n xs = drop m xs
               where m = length xs - n
               where m = length xs - n
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez
finales n xs = drop (length xs - n) xs
finales n xs = drop (length xs - n) xs
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
Línea 212: Línea 212:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
   
   
--Laura Arango, Adriana Gordillo
--Laura Arango, Adriana Gordillo, Elsa Domínguez
segmento m n xs = drop (m-1) (reverse (drop a ys))
segmento m n xs = drop (m-1) (reverse (drop a ys))
                   where a  = length xs - n
                   where a  = length xs - n
                         ys = reverse XS
                         ys = reverse xs
-- Ana Sosa Caballero, Antonio López García, Lucía González, Iván García Rodríguez
-- Ana Sosa Caballero, Antonio López García, Lucía González, Iván García Rodríguez
segmento m n xs = drop (m-1) (take n xs)
segmento m n xs = drop (m-1) (take n xs)
Línea 240: Línea 240:
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo
extremos n xs = take n xs ++ reverse (take n (reverse xs))
extremos n xs = take n xs ++ reverse (take n (reverse xs))
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez
extremos n xs = take n xs  ++  drop (length xs-n) xs
extremos n xs = take n xs  ++  drop (length xs-n) xs
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
Línea 260: Línea 260:
-- Fernando Ruiz Mazo, Irene Ortega
-- Fernando Ruiz Mazo, Irene Ortega
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])
-- Adriana Gordillo
-- Adriana Gordillo, Elsa Domínguez
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]
-- Lucía Hernández
-- Lucía Hernández
Línea 274: Línea 274:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Elsa Domínguez
tresIguales x y z = x==y && x==z
tresIguales x y z = x==y && x==z
--Pelayo Infante
--Pelayo Infante
Línea 296: Línea 296:
--Irene Ortega
--Irene Ortega
tresDiferentes x y z = x/=y && x/=z && y/=x
tresDiferentes x y z = x/=y && x/=z && y/=x
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Ejercicio 18. Definir la función cuatroIguales tal que  
-- Ejercicio 18. Definir la función cuatroIguales tal que  
Línea 305: Línea 306:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


--Laura Arango, Ana Sosa Caballero, Irene Ortega
--Laura Arango, Ana Sosa Caballero, Irene Ortega, Elsa Domínguez
cuatroIguales x y z u = tresIguales x y z == True && x==u
cuatroIguales x y z u = tresIguales x y z == True && x==u
-- Lucía Hernández
-- Lucía Hernández
Línea 326: Línea 327:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


--Laura Arango, Lucía Hernández, Adriana Gordillo
--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez
unicos xs = length (nub xs)
unicos xs = length (nub xs)
-- Ana Sosa Caballero
-- Ana Sosa Caballero
Línea 345: Línea 346:
-- Adriana Gordillo
-- Adriana Gordillo
segundoMinimo xs = minimum (filter (>minimum xs) xs)
segundoMinimo xs = minimum (filter (>minimum xs) xs)
-- Elsa Domínguez
segundoMinimo xs = head (tail(nub (sort xs)))


-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
Línea 354: Línea 357:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


--Laura Arango, Ana Sosa Caballero
--Laura Arango, Ana Sosa Caballero, Elsa Domínguez
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)
--José Manuel Sánchez Parra
--José Manuel Sánchez Parra
Línea 371: Línea 374:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


--Laura Arango, Ana Sosa Caballero, Lucía Hernández, José Manuel Sánchez Parra
--Laura Arango, Ana Sosa Caballero, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez
numPermut xs = length (permutations xs)
numPermut xs = length (permutations xs)


Línea 384: Línea 387:
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------


--Laura Arango, José Manuel Sánchez Parra
--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez
numPares xs = length (nub (filter even xs))
numPares xs = length (nub (filter even xs))
-- Ana Sosa Caballero
-- Ana Sosa Caballero

Revisión del 14:04 2 oct 2021

-- I1M 2021-22: Rel_1.hs (24 de septiembre de 2021)
-- Definiciones por composición sobre números, listas y booleanos. 
-- Departamento de Ciencias de la Computación e I.A.
-- Universidad de Sevilla
-- =====================================================================

import Data.List

-- ---------------------------------------------------------------------
-- Introducción                                                       --
-- ---------------------------------------------------------------------
-- En esta relación se plantean ejercicios con definiciones de funciones 
-- por composición sobre números, listas y booleanos.
-- 
-- Para solucionar los ejercicios puede ser útil el manual de
-- funciones de Haskell que se encuentra en http://bit.ly/1uJZiqi y su
-- resumen en http://bit.ly/ZwSMHO

-- ---------------------------------------------------------------------
-- Ejercicio 1. Definir la función media3 tal que (media3 x y z) es
-- la media aritmética de los números x, y y z. Por ejemplo, 
--    media3 1 3 8     ==  4.0
--    media3 (-1) 0 7  ==  2.0
--    media3 (-3) 0 3  ==  0.0
-- ---------------------------------------------------------------------

-- Manuel Alcaide García, Lucía Hernández, Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Irene Ortega Moncayo, Laura Arango, Ana Sosa Caballero, Adolfo Sagrera Vivancos, Pelayo INfante Pérez, Sara Cerro Torres, Manuel Fco Moreno, Virginia Sánchez, Carmen Blanco, José Manuel Garcia, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
media3 x y z = (x+y+z)/3
-- Antonio López García, César Fornis Catalán
media3 x y z = (sum [x,y,z])/3
-- Francisco José Espinosa
media3 x y z = (x+y+z)/3

-- ---------------------------------------------------------------------
-- Ejercicio 2. Definir la función sumaMonedas tal que 
-- (sumaMonedas a b c d e) es la suma de los euros correspondientes a 
-- a monedas de 1 euro, b de 2 euros, c de 5 euros, d 10 euros y
-- e de 20 euros. Por ejemplo,
--    sumaMonedas 0 0 0 0 1  ==  20
--    sumaMonedas 0 0 8 0 3  == 100
--    sumaMonedas 1 1 1 1 1  ==  38
-- ---------------------------------------------------------------------

-- Adriana Gordillo Melero, Nicolás Rodríguez Ruiz, Lucía Hernández, Manuel Fco Moreno, Laura Arango, Ana Sosa Caballero, Sara Cerro Torres, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez
sumamonedas a b c d e = a+b*2+c*5+d*10+e*20
-- Antonio López García, Irene Ortega, César Fornis Catalán, Virginia Sánchez, Elsa Domínguez
sumaMonedas a b c d e = sum [a, b*2, c*5, d*10, e*20]
-- Adolfo Sagrera Vivancos, Lucía González, Pelayo Infante, Francisco José Espinosa, Carmen Blanco, José Manuel García
sumaMonedas a b c d e = a*1+b*2+c*5+d*10+e*20

-- ---------------------------------------------------------------------
-- Ejercicio 3. Definir la función volumenEsfera tal que 
-- (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,
--    volumenEsfera 10  ==  4188.790204786391
-- Indicación: Usar la constante pi.
-- ---------------------------------------------------------------------

-- Adriana Gordillo Melero, Lucía Hernández, Nicolás Rodríguez Ruiz, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Pelayo Infante, Sara Cerro Torres, José Manuel García, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
 volumenEsfera r = (4/3)*pi*r^3
-- Adolfo Sagrera Vivancos, Carmen Blanco
volumenEsfera r =(4/3)*(pi*r^3)
-- Irene Ortega
volumenEsfera r = pi*(r^3)*4/3
-- Francisco José Espinosa
-- César Fornis Catalán, Virginia Sánchez
volumenEsfera r = (4*pi*r^3)/3

-- ---------------------------------------------------------------------
-- Ejercicio 4. Definir la función areaDeCoronaCircular tal que 
-- (areaDeCoronaCircular r1 r2) es el área de una corona circular de
-- radio interior r1 y radio exterior r2. Por ejemplo,
--    areaDeCoronaCircular 1 2 == 9.42477796076938
--    areaDeCoronaCircular 2 5 == 65.97344572538566
--    areaDeCoronaCircular 3 5 == 50.26548245743669
-- ---------------------------------------------------------------------

--Lucía Hernández, Adriana Gordillo Melero, Antonio López García, Lucía González, Nicolás Rodríguez Ruiz, Sara Cerro Torres, Elsa Domínguez
areaDeCoronaCircular r1 r2 = pi*r2^2 - pi*r1^2
--Álvaro Cano, Ana Sosa Caballero, Irene Ortega, César Fornis Catalán,Manuel Fco Moreno, José Manuel García, Rafael Gómez, Iván García Rodríguez
areaDeCoronaCircular r1 r2 = pi*(r2^2-r1^2)
--Laura Arango
areaDeCoronaCircular r1 r2 = areaCirculo r2 - areaCirculo r1
                             where areaCirculo r = pi*r^2
--Adolfo Sagrera Vivancos, Pelayo Infante , Francisco José Espinosa, Jaime Chaves Navarro
areaDeCoronaCircular r1 r2 = (pi*r2^2)-(pi*r1^2)
-- Carmen Blanco
-- Virginia Sánchez
areaDeCoronaCircular r1 r2 = (pi*(r2)^2) - (pi*(r1)^2)
-- ---------------------------------------------------------------------
-- Ejercicio 5. Definir la función ultimaCifra tal que (ultimaCifra x)
-- es la última cifra del nímero x. Por ejemplo,
--    ultimaCifra 325  ==  5
-- Indicación: Usar la función rem
-- ---------------------------------------------------------------------

--Lucía Hernández, Adriana Gordillo Melero, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía González, Adolfo Sagrera Vivancos Francisco José Espinosa, Lucía González, Nicolás Rodríguez Ruiz, Irene Ortega, Carmen Blanco, Manuel Fco Moreno, César Fornis Catalán, Rafael Gómez, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
ultimaCifra x = rem x 10


-- ---------------------------------------------------------------------
-- Ejercicio 6. Definir la función maxTres tal que (maxTres x y z) es
-- el máximo de x, y y z. Por ejemplo,
--    maxTres 6 2 4  ==  6
--    maxTres 6 7 4  ==  7
--    maxTres 6 7 9  ==  9
-- Indicación: Usar la función max.
-- ---------------------------------------------------------------------

--Lucía Hernández, Laura Arango, Adriana Gordillo, Irene Ortega, Nicolás Rodríguez Ruiz, Manuel Fco Moreno, Rafael Gómez, Jaime Chaves Navarro
maxTres x y z = max(max x y)(z)
-- Ana Sosa Caballero, Adolfo Sagrera Vivancos, Iván García Rodríguez
maxTres x y z = max x t
                where t = max y z

-- Antonio López García, Lucía González, Carmen Blanco
maxTres x y z = maximum [x,y,z]
--César Fornis Catalán, José Manuel García, Elsa Domínguez
maxTres x y z = max (max x y) z
-- ---------------------------------------------------------------------
-- Ejercicio 7. Definir la función rota1 tal que (rota1 xs) es la lista
-- obtenida poniendo el primer elemento de xs al final de la lista. Por
-- ejemplo, 
--    rota1 [3,2,5,7]  ==  [2,5,7,3]
-- ---------------------------------------------------------------------

--Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero , Irene Ortega, Lucía González, Nicolás Rodríguez Ruiz, Carmen Blanco, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
rota1 xs = tail xs ++ [head xs]
-- Antonio López García
rota1 xs = drop 1 xs ++ take 1 xs

-- ---------------------------------------------------------------------
-- Ejercicio 8. Definir la función rota tal que (rota n xs) es la lista
-- obtenida poniendo los n primeros elementos de xs al final de la
-- lista. Por ejemplo, 
--    rota 1 [3,2,5,7]  ==  [2,5,7,3]
--    rota 2 [3,2,5,7]  ==  [5,7,3,2]
--    rota 3 [3,2,5,7]  ==  [7,3,2,5]
-- ---------------------------------------------------------------------

-- Lucía Hernández, Laura Arango, Adriana Gordillo, Ana Sosa Caballero, Antonio López García, Irene Ortega, Lucía González, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Manuel Fco Moreno, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
rota n xs = drop n xs ++ take n xs

-- Fernando Ruiz (mejora para conseguir rotar el vector un número mayor de veces que de elementos en el vector)
rota n xs = drop (mod n (length xs)) xs ++ take (mod n (length xs)) xs

-- ---------------------------------------------------------------------
-- Ejercicio 9. Definir la función rango tal que (rango xs) es la
-- lista formada por el menor y mayor elemento de xs.
--    rango [3,2,7,5]  ==  [2,7]
-- Indicación: Se pueden usar minimum y maximum.
-- ---------------------------------------------------------------------

-- Lucía Hernández, Laura Arango, Irene Ortega, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, José Manuel García, Rafael Gómez, Jaime Chaves Navarro, Sara Cerro Torres, Adriana Gordillo, Elsa Domínguez
rango xs = [minimum xs] ++ [maximum xs]
-- Ana Sosa Caballero, Antonio López García, Iván García Rodríguez
rango xs = [minimum xs, maximum xs]

-- ---------------------------------------------------------------------
-- Ejercicio 10. Definir la función palindromo tal que (palindromo xs) se
-- verifica si xs es un palíndromo; es decir, es lo mismo leer xs de
-- izquierda a derecha que de derecha a izquierda. Por ejemplo,
--    palindromo [3,2,5,2,3]    ==  True
--    palindromo [3,2,5,6,2,3]  ==  False
-- ---------------------------------------------------------------------
--Álvaro Cano, José Manuel Sánchez Parra, Laura Arango, Ana Sosa Caballero, Antonio López García, Lucía Hernández, Manuel Alcaide, Lucía González , Irene Ortega, José Manuel García ,Rafael Gómez, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Jaime Chaves Navarro, Adriana Gordillo, Elsa Domínguez
palindromo xs = xs == reverse xs
--Iván García Rodríguez
palindromo xs = if xs==reverse xs
  then "True"
  else "False"
-- ---------------------------------------------------------------------
-- Ejercicio 11. Definir la función interior tal que (interior xs) es la
-- lista obtenida eliminando los extremos de la lista xs. Por ejemplo,
--    interior [2,5,3,7,3]  ==  [5,3,7]
--    interior [2..7]       ==  [3,4,5,6]
-- ---------------------------------------------------------------------
--Lucía Hernández, Ana Sosa Caballero, Lucía González, Manuel Fco Moreno, Adolfo Sagrera Vivancos, Adriana Gordillo
interior xs = tail (init xs)
--Laura Arango
interior xs = drop 1 (init xs)
--Fernando Ruiz, Antonio López García, Irene Ortega, Jaime Chaves Navarro, Iván García Rodríguez, Elsa Domínguez
interior xs = init (tail xs)
--Manuel Alcaide García
interior xs = init (drop 1 xs)
--José Manuel García
interior xs = reverse (take ((length js)-1) js)
         where js = reverse (take ((length xs)-1) xs)

-- ---------------------------------------------------------------------
-- Ejercicio 12. Definir la función finales tal que (finales n xs) es la
-- lista formada por los n finales elementos de xs. Por ejemplo,
--    finales 3 [2,5,4,7,9,6]  ==  [7,9,6]
-- ---------------------------------------------------------------------
--Álvaro Cano, Lucía González
finales n xs = drop n xs
-- Lucía Hernández, Adolfo Sagrera Vivancos
finales n xs = reverse (take n (reverse xs))
--Laura Arango, Ana Sosa Caballero
finales n xs = drop m xs
               where m = length xs - n
-- Antonio López García, Fernando Ruiz Mazo, Pelayo Infante, Manuel Fco Moreno, Manuel Alcaide García, Irene Ortega, Adriana Gordillo, Iván García Rodríguez, Elsa Domínguez
finales n xs = drop (length xs - n) xs
-- ---------------------------------------------------------------------
-- Ejercicio 13. Definir la función segmento tal que (segmento m n xs) es
-- la lista de los elementos de xs comprendidos entre las posiciones m y
-- n. Por ejemplo,
--    segmento 3 4 [3,4,1,2,7,9,0]  ==  [1,2]
--    segmento 3 5 [3,4,1,2,7,9,0]  ==  [1,2,7]
--    segmento 5 3 [3,4,1,2,7,9,0]  ==  []
-- ---------------------------------------------------------------------
 
--Laura Arango, Adriana Gordillo, Elsa Domínguez
segmento m n xs = drop (m-1) (reverse (drop a ys))
                  where a  = length xs - n
                        ys = reverse xs
-- Ana Sosa Caballero, Antonio López García, Lucía González, Iván García Rodríguez
segmento m n xs = drop (m-1) (take n xs)
-- Fernando Ruiz 
segmento m n xs = reverse (drop ((length xs)-n+m-2)(reverse (drop (m-1) xs)))
--Lucía Hernández
segmento m n xs = take (n-m+1)(drop(m-1) xs)
--Manuel Alcaide García, Irene Ortega
segmento m n xs = take (n-(m-1)) (drop (m-1) xs)
--Pelayo Infante
segmento m n xs = drop(m-1) (reverse a)
 where a=  drop(length xs-n)(reverse xs)


-- ---------------------------------------------------------------------
-- Ejercicio 14. Definir la función extremos tal que (extremos n xs) es
-- la lista formada por los n primeros elementos de xs y los n finales
-- elementos de xs. Por ejemplo, 
--    extremos 3 [2,6,7,1,2,4,5,8,9,2,3]  ==  [2,6,7,9,2,3]
-- ---------------------------------------------------------------------

--Laura Arango
extremos n xs = take n xs ++ finales n XS
-- Ana Sosa Caballero, Lucía Hernández, Fernando Ruiz, Adriana Gordillo
extremos n xs = take n xs ++ reverse (take n (reverse xs))
-- Irene Ortega, Pelayo Infante, Iván García Rodríguez, Elsa Domínguez
extremos n xs = take n xs  ++  drop (length xs-n) xs
-- ---------------------------------------------------------------------
-- Ejercicio 15. Definir la función mediano tal que (mediano x y z) es el
-- número mediano de los tres números x, y y z. Por ejemplo,
--    mediano 3 2 5  ==  3
--    mediano 2 4 5  ==  4
--    mediano 2 6 5  ==  5
--    mediano 2 6 6  ==  6
-- Indicación: Usar maximum y minimum.
-- ---------------------------------------------------------------------
 
--Laura Arango
 mediano x y z = max x (min y z) (Contraejemplo : mediano 8 10 3)
-- Lucía Hernández
mediano x y z = minimum [maximum [x,y], z] (Contraejemplo : mediano 8 10 3)
-- Antonio López García
mediano x y z = maximum [minimum [x,y], minimum[x,z], minimum[y,z]]
-- Fernando Ruiz Mazo, Irene Ortega
mediano x y z = minimum ([maximum [x,y]] ++ [maximum [y,z]] ++ [maximum [x,z]])
-- Adriana Gordillo, Elsa Domínguez
mediano x y z = (x+y+z)-maximum[x,y,z]-minimum[x,y,z]
-- Lucía Hernández
mediano x y z = maximum [minimum [x,y], minimum [maximum[x,y],z]]
-- Iván García Rodríguez
mediano x y z = max x a where a=min y z
-- ---------------------------------------------------------------------
-- Ejercicio 16. Definir la función tresIguales tal que 
-- (tresIguales x y z) se verifica si los elementos x, y y z son
-- iguales. Por ejemplo, 
--    tresIguales 4 4 4  ==  True
--    tresIguales 4 3 4  ==  False
-- ---------------------------------------------------------------------

--Laura Arango, Ana Sosa Caballero, Lucía Hernández, Irene Ortega, Adriana Gordillo, Elsa Domínguez
tresIguales x y z = x==y && x==z
--Pelayo Infante
tresIguales x y z = x^3==x*y*z
--Iván García Rodríguez
tresIguales x y z = if x==y && y==z
  then "True"
  else "False"
-- ---------------------------------------------------------------------
-- Ejercicio 17. Definir la función tresDiferentes tal que 
-- (tresDiferentes x y z) se verifica si los elementos x, y y z son
-- distintos. Por ejemplo, 
--    tresDiferentes 3 5 2  ==  True
--    tresDiferentes 3 5 3  ==  False
-- ---------------------------------------------------------------------

--Laura Arango, Lucía Hernández, Adriana Gordillo
tresDiferentes x y z = x/=y && x/=z
-- Ana Sosa Caballero
tresDiferentes x y z = and [x/=y, y/=z, x/=z]
--Irene Ortega
tresDiferentes x y z = x/=y && x/=z && y/=x

-- ---------------------------------------------------------------------
-- Ejercicio 18. Definir la función cuatroIguales tal que 
-- (cuatroIguales x y z u) se verifica si los elementos x, y, z y u son
-- iguales. Por ejemplo, 
--    cuatroIguales 5 5 5 5   ==  True
--    cuatroIguales 5 5 4 5   ==  False
-- Indicación: Usar la función tresIguales.
-- ---------------------------------------------------------------------

--Laura Arango, Ana Sosa Caballero, Irene Ortega, Elsa Domínguez
cuatroIguales x y z u = tresIguales x y z == True && x==u
-- Lucía Hernández
cuatroIguales x y z u = tresIguales x y z && x==u
-- Adriana Gordillo
cuatroIguales x y z u = x==y && y==z && z==u

-- ---------------------------------------------------------------------
-- Ejercicios para trabajar con Data.List. Ver:
-- http://www.cs.us.es/~jalonso/cursos/i1m-19/doc/Funciones_basicas.html
-- ---------------------------------------------------------------------

-- ---------------------------------------------------------------------
-- Ejercicio 19. Definir la función unicos, tal que (unicos xs)
-- devuelva la cantidad de elementos únicos que hay en la lista xs.
-- Por ejemplo, 
--    unicos [1,4,8,2,1,4,6,1]  == 5 
--    unicos [10,9,8,10,5,10]  == 4
--    unicos [10,9,8]  == 3
-- ---------------------------------------------------------------------

--Laura Arango, Lucía Hernández, Adriana Gordillo, Elsa Domínguez
unicos xs = length (nub xs)
-- Ana Sosa Caballero
unicos xs = length(group(sort xs))

-- ---------------------------------------------------------------------
-- Ejercicio 20. Definir la función segundoMinimo, tal que (segundoMinimo xs)
-- devuelve el segundo elemento más pequeńo de la lista xs, obviando 
-- repeticiones. Por ejemplo, 
--    segundoMinimo [6,9,2,4]  ==  4
--    segundoMinimo [0.5,1.2,0.5,4.4,0.5]  ==  1.2
-- ---------------------------------------------------------------------

--Laura Arango
segundoMinimo xs = sort (nub xs) !! 1
--Lucía Hernández
segundoMinimo xs = minimum (delete(minimum (xs))(nub xs))
-- Adriana Gordillo
segundoMinimo xs = minimum (filter (>minimum xs) xs)
-- Elsa Domínguez
segundoMinimo xs = head (tail(nub (sort xs))) 

-- ---------------------------------------------------------------------
-- Ejercicio 21. Definir la función kMaximo, tal que (kMaximo n xs) 
-- devuelve el k-máximo elemento de xs (es decir, el que está en la
-- posición k de valores más altos), obviando repeticiones. Por ejemplo, 
--    kMaximo 2 [6,9,2,4]  == 6
--    kMaximo 3 [10,9,8,10,5]  == 8
-- ---------------------------------------------------------------------

--Laura Arango, Ana Sosa Caballero, Elsa Domínguez
kMaximo k xs = reverse (sort (nub xs)) !! (k-1)
--José Manuel Sánchez Parra
kMaximo k xs = maximum(take k xs)
--Lucía Hernández
kMaximo k xs = head(drop(k-1) (reverse(sort (nub xs))))
--Antonio Medinilla Garófano
quitarMaximo xs = delete (maximum xs) xs
kMaximo k xs = maximum ((iterate quitarMaximo (nub xs)) !! (k-1))
-- ---------------------------------------------------------------------
-- Ejercicio 22. Definir la función numPermut, tal que (numPermut xs) 
-- devuelve el número de permutaciones sin repetición posibles con los
-- elementos de la lista xs. Por ejemplo, 
--    numPermut [6,2,4]  == 6
--    numPermut [10,8,10,5]  == 24
-- ---------------------------------------------------------------------

--Laura Arango, Ana Sosa Caballero, Lucía Hernández, José Manuel Sánchez Parra, Elsa Domínguez
numPermut xs = length (permutations xs)

-- ---------------------------------------------------------------------
-- Ejercicio 23 Definir la función numPares, tal que (numPares xs)
-- devuelva cuantos números pares en total (sin repeticiones) aparecen
-- en la lista xs. Por ejemplo, 
--    numPares [1,4,8,2,1,4,6,1]  == 4
--    numPares [10,9,8,10,5,10]  == 2
--    numPares [10,9,8]  == 2
-- Indicación: puede ser útil la función partitions
-- ---------------------------------------------------------------------

--Laura Arango, José Manuel Sánchez Parra, Elsa Domínguez
numPares xs = length (nub (filter even xs))
-- Ana Sosa Caballero
numPares xs = length(group (sort (filter even xs)))
--Lucía Hernández
numPares xs = length(fst(partition even (nub xs)))