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

grafic

Notare

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

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.

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)