Sumes de temps P38424


Statement
 

pdf   zip

thehtml

Tenim definit un tipus per guardar duracions temporals de la forma següent:

data Temps = Temps Int Int

on el primer enter correspon a les hores i el segon als minuts. Se suposa que les hores es troben entre 0 i 99 i els minuts entre 0 i 59.

També tenim arbres genèrics definits així:

data Arbre a = Arbre a [Arbre a]
  1. Feu que Temps sigui instància de la classe Show tot fent que els dos nombres es mostrin sempre amb dues xifres amb un ’:’ al mig.
    ghci> Temps 1 5 01:05 ghci> Temps 2 10 02:10
  2. Implementeu una funció suma :: Temps -> Temps -> Temps que, donats dos temps, en retorni la seva suma.
    ghci> suma (Temps 1 5) (Temps 2 10) 03:15 ghci> suma (Temps 1 35) (Temps 2 40) 04:15
  3. Implementeu una funció sumes :: [Temps] -> Temps sense recursivitat i en notació "point free (sense paràmetres) que, donada una llista de temps, retorni la suma dels seus elements.
    ghci> sumes [Temps 1 35,Temps 2 40] 04:15 ghci> sumes [Temps 1 35,Temps 2 40,Temps 9 10] 13:25
  4. Implementeu una funció sumesArbre :: Arbre Temps -> Temps que, donat un arbre general de duracions, calculi la suma dels seus temps. Per exemple:
    ghci> let f = Arbre (Temps 2 40) [Arbre (Temps 1 1) []] ghci> let t = (Arbre (Temps 1 35) [f, Arbre (Temps 9 10) []]) ghci> sumesArbre f 03:41 ghci> sumesArbre t 14:26
  5. Feu un programa implementant una acció main :: IO () que:
    1. obtingui una llista de temps separats per espais de l’entrada estàndar (en una única linia),
    2. parsegi l’entrada obtenint una llista de temps,
    3. en calculi la seva suma i,
    4. mostri el resultat per la sortida estàndar.
Public test cases
  • Input

    1:05 2:10 9:10
    

    Output

    12:25
    
  • Information
    Author
    Gerard Escudero
    Language
    Catalan
    Official solutions
    Haskell
    User solutions
    Haskell