11 Nov

Note

Student cenzNume cenzNr valLei cenz Nota Rotunjita
Buţurcă Gabriela-Raluca 95% 95% 95% 55% 8.1 8
Copaci Iulia-Diana 95% 95% 100% 60% 8.4 8
Cornea V. Matei-Stefan 100% 95% 95% 80% 9.1 9
Dumitru C. Diana-Maria 100% 95% 95% 95% 9.6 10
Frăţilă Daniel 95% 95% 10% 0% 4.1 4
Gabor Dragos-Alexandru 95% 100% 100% 95% 9.7 10
Gherguţ Alexandru-Gabriel 95% 95% 95% 80% 9 9
Ghiţă Simona-Irina 95% 95% 20% 0% 4.3 4
Hristache Diana Gabriela 0% 0% 0% 0% 0.5 1
Ileana Marian 0% 0% 0% 0% 0.5 1
Luparu Andreea-Alina (344) 95% 95% 100% 35% 7.6 8
Mareş-Medar Razvan 100% 100% 0% 0% 4 4
Mihai Simona-Maria 85% 95% 20% 0% 4.1 4
Mohora Mihai 100% 95% 95% 75% 8.9 9
Niţulescu Alexandra-Cristiana 95% 95% 80% 45% 7.4 7
Oprescu Liviu-Vasile 95% 95% 95% 25% 7.1 7
Popa Dimitrios 95% 95% 50% 0% 5.1 5
Simon Andrei-Alexandru 80% 50% 60% 0% 4.4 4
Suditu George Alexandru 80% 95% 95% 0% 5.9 6
Tanase Mihai-Andrei 95% 100% 95% 95% 9.6 10
Vernica Teodor-Iulian 95% 95% 50% 5% 5.3 5
Rîpanu Georgiana Alina 45% 100% 40% 40% 5.3 5
Profeanu Ileana (MI) 50% 95% 95% 10% 5.7 6
Keandra Bogdan (MI) 90% 95% 90% 0% 6 6
Chinga Remus Daniel (332) 100% 100% 95% 95% 9.7 10
Paun Cornel (342) 95% 95% 95% 0% 6.2 6

Felicitari tuturor!

Pentru nemultumiri – astept mesaj pe mail.

Distributie note

Media grupei: 6.37, promovabilitate: 61%

distributie

Notare

Pentru fiecare exercitiu s-a acordat un procentaj din punctajul valorat:

Punctaj exercitii

Rezolvare

Cenzurare nume

Cenzurare nume proprii (care incep cu litera mare), folosind recursivitate

> cenzNume "Dan stie locul"
"D** stie locul"
Rezolvare
cenzNume "" = ""
cenzNume [c] = [c]
cenzNume (f:s:r)
  | (isUpper f || f == '*') && s /= ' '  = f : cenzNume ('*':r)
  | otherwise                            = f : cenzNume (s:r)

Cenzurare numere

Cenzurare numere - inlocuire fiecare cifra dintr-un string cu X

> cenzNr "suna la 0722"
"suna la XXXX"
Rezolvare folosind list comprehension
cenzNr s = [if isDigit c then 'X' else c | c <- s]
Rezolvare folosind higher order functions
cenzNr = map (\c -> if isDigit c then 'X' else c)

Valoare in Lei

Valoarea totala a valutei dintr-un string, cu rata de conversie data de functia rata

rata '$' = 3  -- dolari
rata 'E' = 4  -- euro
rata 'L' = 5  -- lire

Bonus doar valuta straina (ignorand Leii)

> valLei "10l si 100E plus 1$"
403  -- 10 lei ignorat + 100*4 eur + 1*3 dolari
Rezolvare folosind list comprehension
valLei s = sum [converted w | w <- words s, isMoney w, last w /= 'l']
  where converted money = parseInt (init money) * rata (last money)
        isMoney str = all isDigit (init str)
Rezolvare folosind higher order functions
valLei = words >>> filter isMoney >>> filter (last >>> (/= 'l')) >>> map converted >>> sum
  where isMoney str = all isDigit (init str)
        converted money = parseInt (init money) * rata (last money)
        
valLei = sum . map converted . filter ((/= 'l') . last) . filter isMoney . words  -- echivalent
  where ...  -- la fel ca mai sus
  
valLei s = sum (map converted (filter (\w -> isMoney w && last w /= 'l') (words s)))  -- echivalent
  where ...  -- la fel ca mai sus

Cenzurare conversatie

Pentru o conversatie data ca o lista de (Persoana, Mesaj):

Intoarce o pereche formata din:

exConv = [ -- exemplu de conversatie
  ("inspector John", "Aminteste-mi pretul"),
  ("Victor",         "500$ pe langa cei 200E"),
  ("inspector John", "Batem palma")
  ]
  
> cenz exConv
("inspector John: Aminteste-mi pretul;"
 "V*****: XXX$ pe langa cei XXXE;"
 "inspector John: Batem palma;"
 , 2300)  -- 500$ + 200E, in Lei
Rezolvare varianta A
cenz conv = (concat replies, sum bani)
  where replies = [cenzInfrac pers ++ ": " ++ cenzNr msg ++ ";" | (pers, msg) <- conv]
        cenzInfrac p = if any (`isPrefixOf` p) funcPolitie then p else cenzNume p
        bani = [valLei m | (_, m) <- conv]
Rezolvare varianta B

In enunt se schimba cenzureaza numele infractorilor in cenzureaza numele politistilor

cenzB conv = (concat replies, sum bani)
  where replies = [cenzPol pers ++ ": " ++ cenzNr msg ++ ";" | (pers, msg) <- conv]
        cenzPol p = if any (`isPrefixOf` p) funcPolitie then cenzNume p else p
        bani = [valLei m | (_, m) <- conv]