16 Dec
Note
Student | exist |
overlap |
norm |
optim |
main |
Nota | Rotunjită |
---|---|---|---|---|---|---|---|
Buţurcă Gabriela-Raluca | 100 % | 100 % | 100 % | 35 % | 0 % | 7.9 | 8 |
Chinga Remus Daniel (332) | 100 % | 100 % | 80 % | 95 % | 40 % | 9.0 | 9 |
Copaci Iulia-Diana | 95 % | 85 % | 95 % | 0 % | 0 % | 7.0 | 7 |
Cornea V. Matei-Stefan | 90 % | 35 % | 15 % | 40 % | 60 % | 5.8 | 6 |
Dumitru C. Diana-Maria | 100 % | 100 % | 0 % | 95 % | 100 % | 8.6 | 9 |
Ene Denisa | 75 % | 35 % | 50 % | 0 % | 0 % | 4.5 | 5 |
Frăţilă Daniel | 100 % | 35 % | 10 % | 0 % | 0 % | 4.2 | 4 |
Gabor Dragos-Alexandru | 100 % | 95 % | 100 % | 100 % | 100 % | 10.0 | 10 |
Gherguţ Alexandru-Gabriel | 100 % | 65 % | 65 % | 0 % | 85 % | 7.9 | 8 |
Ghiţă Simona-Irina | 75 % | 65 % | 55 % | 35 % | 75 % | 7.3 | 7 |
Ileana Marian | 85 % | 50 % | 0 % | 0 % | 0 % | 4.0 | 4 |
Keandra Bogdan (MI) | 100 % | 35 % | 50 % | 0 % | 100 % | 7.2 | 7 |
Mihai Simona-Maria | 100 % | 100 % | 50 % | 80 % | 90 % | 9.3 | 9 |
Mohora Mihai | 100 % | 75 % | 100 % | 0 % | 100 % | 9.2 | 9 |
Niţulescu Alexandra-Cristiana | 100 % | 100 % | 40 % | 95 % | 100 % | 9.5 | 10 |
Oprescu Liviu-Vasile | 90 % | 100 % | 35 % | 0 % | 0 % | 5.9 | 6 |
Ostin Alina (MI) | 100 % | 65 % | 50 % | 0 % | 70 % | 7.2 | 7 |
Paun Cornel (342) | 100 % | 65 % | 55 % | 85 % | 80 % | 8.5 | 9 |
Popa Dimitrios | 60 % | 40 % | 70 % | 0 % | 0 % | 4.8 | 5 |
Profeanu Ileana (MI) | 100 % | 85 % | 100 % | 10 % | 80 % | 9.1 | 9 |
Rîpanu Georgiana Alina | 100 % | 90 % | 100 % | 0 % | 75 % | 9.0 | 9 |
Suditu George Alexandru | 95 % | 65 % | 0 % | 0 % | 0 % | 4.5 | 5 |
Tanase Mihai-Andrei | 100 % | 55 % | 90 % | 55 % | 40 % | 7.8 | 8 |
Vernica Teodor-Iulian | 80 % | 70 % | 60 % | 0 % | 60 % | 6.9 | 7 |
Zamfira Ștefan | 80 % | 20 % | 0 % | 0 % | 0 % | 3.2 | 3 |
Felicitari tuturor!
Pentru nemultumiri – astept mesaj pe mail.
Distributie note
Notare
Pentru fiecare exercitiu s-a acordat un procentaj din punctajul valorat:
- 100% toate cazurile tratate corect
- 35 - 95% cazuri netratate
- -10% import/signatura functie lipsa
- -10% greseli sintactice
Deoarece un singur student a obtinut nota peste 8.7, notele au fost ridicate astfel incat un student care a obtinut 9.25 sa primeasca 10. Restul notelor au fost scalate liniar.
Punctaj exercitii
Punctajul exercitiului optimize
a fost scazut de la 1.5p la 1p, in favoarea cresterii lui main
de la 1.5p la 2p.
- 1p din oficiu
- 2p
exist
- 2p
overlap
- 2p
normalize
- 1p
optimize
- 2p
main
Rezolvare
module Domeniu (Dom,
exist,
overlap,
normalize,
optimize) where
data Dom a = Empty
| Ran a a
| (Dom a) :|: (Dom a) -- reuniune
| (Dom a) :&: (Dom a) -- intersectie
deriving (Show, Read)
Apartenenta
Daca numarul exista in domeniu
exist 3 ((Ran 1 3) :|: (Ran 6 10)) == True
exist 5 ((Ran 1 3) :|: (Ran 6 10)) == False
Rezolvare
exist :: Ord a => a -> Dom a -> Bool
exist _ Empty = False
exist x (Ran a b) = a <= x && x <= b
exist x (i1 :|: i2) = exist x i1 || exist x i2
exist x (i1 :&: i2) = exist x i1 && exist x i2
Suprapunere
Daca doua intervale se suprapun
overlap (Ran 1 4) (Ran 3 5) == True -- [1,4] ∩ [3,5] = [3,4]
overlap (Ran 1 4) (Ran 5 6) == False -- [1,4] ∩ [5,6] = {}
overlap Empty (Ran 3 4) == False -- {} ∩ [3,4] = {}
Rezolvare
overlap :: Ord a => Dom a -> Dom a -> Bool
overlap (Ran a b) (Ran c d) =
(a <= c && c <= b) || -- a < c < b
(a <= d && d <= b) || -- a < d < b
(c <= a && a <= d) || -- c < a < d
(c <= b && b <= d) -- c < b < d
overlap _ _ = False
Normalizare
Rezolvarea folosind (AUB) ∩ C = (A ∩ C) U (B ∩ C)
> normalize (((Ran 1 2) :|: (Ran 3 4)) :&: (Ran 2 3))
(Ran 1 2 :&: Ran 2 3) :|: (Ran 3 4 :&: Ran 2 3)
Rezolvare
normalize :: Ord a => Dom a -> Dom a
normalize Empty = Empty
normalize r@(Ran _ _) = r
normalize ((x :|: y) :&: z) = normalize (x :&: z) :|: normalize (y :&: z)
normalize (x :|: y) = normalize x :|: normalize y
normalize (x :&: y) = normalize x :&: normalize y
Optimizare
Rezolvarea intersectiilor si reuniunilor
> optimize ( ([1,5] ∩ [0,7]) U ([3,9] ∩ [0,7]) ) U ( ([8,11] ∩ [9,14]) U {} )
[1,7] U [9,11]
Rezolvare
optimize :: Ord a => Dom a -> Dom a
optimize Empty = Empty
optimize r@(Ran _ _) = r
optimize (x :|: Empty) = optimize x -- U
optimize (Empty :|: x) = optimize x -- U
optimize (_ :&: Empty) = Empty
optimize (Empty :&: _) = Empty
optimize r@(Ran a b :|: Ran c d) -- U
| overlap (Ran a b) (Ran c d) = Ran (min a c) (max b d)
| otherwise = r
optimize (Ran a b :&: Ran c d)
| overlap (Ran a b) (Ran c d) = Ran (max a c) (min b d)
| otherwise = Empty
optimize (x :|: y) = optimize $ optimize x :|: optimize y
optimize (x :&: y) = optimize $ optimize x :&: optimize y
Interactiune
Citirea unui domeniu de la tastatura si afisarea acestuia optimizat, intr-un modul separat.
> main
(((Ran 1 2) :|: (Ran 3 4)) :&: (Ran 3 5)) -- input
Ran 3 4 -- output
Rezolvare
module Principal where
import Domeniu
main :: IO (Dom Int)
main = do
line <- getLine
let d = read line :: Dom Int
return (optimize d)