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%
Notare
Pentru fiecare exercitiu s-a acordat un procentaj din punctajul valorat:
- 0% nerezolvat (
= undefined
) - 10% - 45% idee buna (dar nu compileaza)
- 50% - 90% rezolvare partiala
- 95% rezolvare completa
- 100% rezolvare completa si succinta
Punctaj exercitii
- 0.5p din oficiu
- 1.5p cenzurare numere
cenzNr
- 2p cenzurare nume
cenzNume
- 2.5p valoare in Lei
valLei
- 3.5p cenzurare conversatie
cenz
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)
:
- cenzureaza valorile monetare din mesaje (folosind functia
cenzNr
) - cenzureaza numele infractorilor (folosind functia
cenzNume
); numele politistilor se deosebesc de cele ale infractorilor prin faptul ca incep cu una dinfuncPolitie = ["inspector", "general", "ofiter"]
Intoarce o pereche formata din:
- concatenarea tuturor replicilor in forma
Pers1: Mesaj1; Pers2: Mesaj2; ...
- Bonus suma totala discutata, in Lei (folosind functia
valLei
)
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]