Candidats P82972


Statement
 

pdf   zip

html

Guardem en una llista de tuples els vots rebuts pels candidats a l’ajuntament d’un municipi. El primer component de cada tupla és un string que conté el nom i cognoms del candidat i el segon és el nombre de vots. Per exemple:

[("Joan Pere Jorbina Palau", 570), ("Niceto Brunildo Fornells", 679),
 ("Mariona Puig Peix", 701), ("Adriana de Tor Quemada", 451)]

Es demanen els codis de diverses funcions. Seguiu el format dels exemples que es mostren a sota. Suposseu que a l’estructura sempre hi ha almenys un candidat.

  1. Feu una funció votsMinim :: [([Char], Int)] -> Int -> Bool en que, donada una llista de tuples com la descrita i donat un enter, retorni True si hi ha algun candidat que no hagi assolit un nombre de vots superior a l’enter donat i False en cas contrari.
  2. Feu una funció candidatMesVotat :: [([Char], Int)] -> [Char] en que, donada una llista de tuples com la descrita, retorni el nom i cognoms del candidat mes votat. Per resoldre aquest problema utilitzeu les funcions comparing i maximumBy incloses en els mòduls Data.Ord i Data.List respectivament.
  3. Una llista de tuples d’ingressos representa els ingressos anuals de les persones del municipi. La primera component de la tupla és un string que conté el nom i cognoms de la persona i la segona són seus ingressos anuals expressats en euros. Per exemple:
    [("Mariona Puig Peix", 15456), ("Arnau Osorio Lucas", 27654), 
     ("Arnau Brigat Pelfred", 18654), ("Niceto Brunildo Fornells", 14567)]
    

    Feu una funció votsIngressos :: [([Char], Int)] -> [([Char], Int)] -> [[Char]] en que, donades una llista de tuples de vots i una d’ingressos, retorni la llista dels candidats del que es desconeix els ingressos, és a dir, els que són a l’estructura de vots però no a la d’ingressos.

  4. Feu una funció rics :: [([Char], Int)] -> [([Char], Int)] -> [[Char]] en que, donades una llista de tuples de vots i una d’ingressos, generi i retorni una llista amb els noms de les tres persones més riques del municipi. A més, per cadascuna d’aquestes persones que sigui un candidat al costat del nom hi ha d’haver un asterisc (‘*’). La llista ha d’estar ordenada de més a menys ingressos. Per resoldre aquest problema utilitzeu les funcions comparing i sortBy incloses en els mòduls Data.Ord i Data.List respectivament.

Les dues primeres funcions valen 20 punts i les altres dues 30.

Observació

Aquest problema és el problema "Candidats" creat per professors del departament de Ciències de la Computació amb docència a l’ETSEIB. Podeu consultar l’original a:

http://gie.cs.upc.edu/fi/temes/diccionaris/Candidats.html

Public test cases
  • Input

    let ltVots = [("Joan Pere Jorbina Palau", 570), ("Niceto Brunildo Fornells", 679), ("Mariona Puig Peix", 701), ("Adriana de Tor Quemada", 451)]
    votsMinim ltVots 400
    votsMinim ltVots 600
    candidatMesVotat ltVots
    let ltIng = [("Mariona Puig Peix", 15456), ("Arnau Osorio Lucas", 27654), ("Arnau Brigat Pelfred", 18654), ("Niceto Brunildo Fornells", 14567)]
    votsIngressos ltVots ltIng
    rics ltVots ltIng
    

    Output

    False
    True
    "Mariona Puig Peix"
    ["Joan Pere Jorbina Palau","Adriana de Tor Quemada"]
    ["Arnau Osorio Lucas","Arnau Brigat Pelfred","Mariona Puig Peix*"]
    
  • Information
    Author
    Gerard Escudero i professors de l'ETSEIB del departament de CS
    Language
    Catalan
    Official solutions
    Haskell
    User solutions
    Haskell