Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sd-ca:teme:teme-03 [2015/04/24 20:32]
razvan_madalin.matei [Exemplu input/output]
sd-ca:teme:teme-03 [2015/05/08 12:37] (current)
razvan_madalin.matei
Line 8: Line 8:
 Depunctare întârziere după depășirea deadline-ului soft: ** -10p/zi ** Depunctare întârziere după depășirea deadline-ului soft: ** -10p/zi **
  
-** Deadline soft: XX mai, ora 23:55 **+** Deadline soft: 11 mai, ora 23:55 **
  
-** Deadline hard: XX mai, ora 23:55 **+** Deadline hard: 14 mai, ora 23:55 **
  
 +
 +
 +==== Modificari si actualizari ====
 +    * **27 aprilie**: a fost modificat example.json si exemplul de input/​output
 +    * **27 aprilie**: au fost publicate testele
 +    * **28 aprilie**: a fost uploadat checkerul
 +    * **3 mai**: s-au adaugat explicatii ale mesajelor de eroare
 +    * **3 mai**: a fost uploadata o noua versiune de teste
 +    * **8 mai**: amanare deadline
  
  
Line 21: Line 30:
   * va folosi structurile de date pentru a implementa o posibilia aplicatie reala   * va folosi structurile de date pentru a implementa o posibilia aplicatie reala
  
 +Odata cu explozia internetului din ziua de azi a crescut, inevitabil, si gradul de risc la care un utilizator este expus in activitatea de zi cu zi. Pentru o detectie cat mai completa a numeroaselor tipuri de atacuri cibernetice,​ compania la care tocmai ati fost angajati va pune la dispozitie un set de date (in format JSON) ce contine statistici despre pagini web posibil"​suspecte"​ (de exemplu: cu fisiere executabile infectate, cunoscute pentru fishing, continut ilegal sau potential daunator, etc.) 
  
 +Generic numite "​event-uri",​ aceste date sunt stocate de catre Bitdefender intr-un depozit propriu, numit Event Correlation (EC). Pentru ca aceste inregistrari sa cuprinda o gama cat mai variata si actualizata de activitati ilegale (in vederea detectiei si preventiei) compania dispune de niste masini virtuale, numite HoneyPots (vulnerabile intentionat la atacuri) si raspandinte in diverse puncte geografice pe glob, care sa atraga in capcana hackeri si sa culeaga date despre activitatea lor: ce pagini acceseaza de pe honeypot-ul pe care tocmai (cred ca) l-au compromis, ce tipuri de atacuri initiaza, ce fisiere folosesc pentru aceasta, etc. 
  
 ===== Cerinta ===== ===== Cerinta =====
  
-Se cere implementarea unei structuri de date care sa eficientizeze manipularea obiectelor de tip JSON+Se cere implementarea unei structuri de date care sa eficientizeze ​interogarea si manipularea obiectelor de tip JSON.
- +
-JSON este un acronim în limba engleză pentru JavaScript Object Notation, și este un format de reprezentare și interschimb de date între aplicații informatice. Este un format text, inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor și a altor structuri de date și este folosit în special pentru a transmite date structurate prin rețea, procesul purtând numele de serializare. JSON este alternativa mai simplă, mai facilă decât limbajul XML. Eleganța formatului JSON provine din faptul că este un subset al limbajului JavaScript (ECMA-262 3rd Edition), fiind utilizat alături de acest limbaj. Formatul JSON a fost creat de Douglas Crockford și standardizat prin RFC 4627.+
  
-TODO: POVESTE+JSON este un acronim în limba engleza pentru JavaScript Object Notation, si este un format de reprezentare si interschimb de date intre aplicatii informatice. Este un format text, inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor si a altor structuri de date si este folosit in special pentru a transmite date structurate prin retea, procesul purtand numele de serializare. JSON este alternativa mai simpla, mai facila decat limbajul XML. Eleganta formatului JSON provine din faptul ca este un subset al limbajului JavaScript (ECMA-262 3rd Edition), fiind utilizat alaturi de acest limbaj. Formatul JSON a fost creat de Douglas Crockford si standardizat prin RFC 4627.
  
 Exemplu de obiect JSON: Exemplu de obiect JSON:
  
 <code cpp example.json>​ <code cpp example.json>​
-{ +[ 
-  "​firstName":​ "​John",​ +  ​
-  "​lastName":​ "​Smith",​ +    ​"​firstName":​ "​John",​ 
-  "​isAlive":​ true, +    "​lastName":​ "​Smith",​ 
-  "​age":​ 25, +    "​isAlive":​ true, 
-  "​address":​ { +    "​age":​ 25, 
-    "​streetAddress":​ "21 2nd Street",​ +    "​address":​ { 
-    "​city":​ "New York",​ +      "​streetAddress":​ "21 2nd Street",​ 
-    "​state":​ "​NY",​ +      "​city":​ "New York",​ 
-    "​postalCode":​ "​10021-3100+      "​state":​ "​NY",​ 
-  }, +      "​postalCode":​ "​10021-3100"​
-  "​phoneNumbers":​ [ +
-    { +
-      "​type":​ "​home",​ +
-      "​number":​ "212 555-1234"+
     },     },
-    { +    ​"​phoneNumbers":​ [ 
-      "​type":​ "​office",​ +      ​{ 
-      "​number":​ "646 555-4567"​ +        "​type":​ "​home",​ 
-    +        "​number":​ "212 555-1234"​ 
-  ], +      ​}, 
-  "​children":​ [ +      { 
-  ​], +        ​"​type":​ "​office",​ 
-  "​spouse":​ null +        "​number":​ "646 555-4567"​ 
-}+      
 +    ], 
 +    "​children":​ [ ], 
 +    "​spouse":​ null 
 +  } 
 +]
 </​code>​ </​code>​
  
Line 68: Line 78:
   * **JSON_NUMBER**:​ intreg   * **JSON_NUMBER**:​ intreg
   * **JSON_NULL**:​ valoare nula, reprezentata de cuvantul //null//   * **JSON_NULL**:​ valoare nula, reprezentata de cuvantul //null//
- 
-Cerinta pentru voi este sa stocati obiecte de tip JSON intr-o structura de date care sa optimizeze operatiile de interogare si modificare a obiectelor JSON. 
  
  
Line 75: Line 83:
 ===== Operatii ===== ===== Operatii =====
 Operatiile pe care structura voastra de date trebuie sa le efectueze sunt: Operatiile pe care structura voastra de date trebuie sa le efectueze sunt:
-  * **load(fisier)**:​ incarca in structura voastra de date un obiect JSON dintr-un fisier 
   * **get(succesiune_chei)**:​ afiseaza valoarea ultimei chei din succesiunea de chei   * **get(succesiune_chei)**:​ afiseaza valoarea ultimei chei din succesiunea de chei
   * **put(succesiune_chei,​ valoare)**: adauga/​modifica perechea ultima_cheie:​valoare   * **put(succesiune_chei,​ valoare)**: adauga/​modifica perechea ultima_cheie:​valoare
-  * **del(succesiune_chei)**:: sterge perechea ultima_cheie:​valoare+  * **del(succesiune_chei)**:​ sterge perechea ultima_cheie:​valoare
  
 +Operatiile pot esua cu urmatoarele mesaje de eroare, urmate de valoarea cheii la care au esuat:
 +  * **ERROR_NOT_ARRAY**:​ se cere un index de la o cheie care nu reprezinta un JSON_ARRAY
 +  * **ERROR_NOT_OBJECT**:​ se cere o cheie de la o cheie care nu reprezinta un JSON_OBJECT
 +  * **ERROR_INDEX_OUT_OF_RANGE**:​ se cere un index de la o cheie care reprezinta un JSON_ARRAY cu un numar mai mic de intrari decat index-ul cerut
 +  * **KEY_NOT_FOUND**:​ cheia cautata nu a fost gasita
  
 +Fiecare mesaj de eroare este precedat de numele operatiei la care a aparut eroarea.
 +
 +Pentru a observa comportamentul operatiilor de mai sus, urmariti exemplul de input/​output.
  
 ===== Exemplu input/​output ===== ===== Exemplu input/​output =====
 +Operatiile de mai jos sunt efectuate asupra JSON-ului din //​example.json//​
 +
 <columns 100% 50% -> <columns 100% 50% ->
 <code cpp input> <code cpp input>
-LOAD example.json +GET 
-GET "notAKey+GET 
-GET "spouse+GET 0 "firstName
-GET "​isAlive"​ +GET "age
-GET "age+GET "​isAlive"​ 
-GET "firstName+GET "spouse
-GET "​address"​ +GET "notAKey
-GET "​address"​ "streetAddress+GET "​address" "city
-GET "notAnObject" "streetAddress+GET "​address"​ "notAKey
-GET "phoneNumbers+GET "notAKey1" "notAKey2
-GET "​phoneNumbers"​ 0 +GET "spouse" ​0 
-GET "​phoneNumbers" ​"​type"​ +GET "​phoneNumbers"​ 0 
-GET "phoneNumbers" ​"type+GET "​phoneNumbers" ​"​type"​ 
-PUT "newKey" "newValue+GET "children" 
-PUT "firstName" "Jack+GET 0 "children" ​0 
-PUT "​address" "state" null +PUT "aKey" "aValue
-PUT "notAnObject" "newKey" "newValue+PUT "aKey" "aValue"​ 
-PUT "phoneNumbers" ​"type" "office+GET 0 "aKey
-PUT "​phoneNumbers"​ "​type"​ "​mobile"​ +PUT "​address"​ null 
-GET "​phoneNumbers" ​"​type"​ +GET 0 "address" "city" 
-DEL "spouse+GET 0 "address
-DEL "notAKey+PUT "spouse" "Jessica" 
-DEL "​phoneNumbers"​ 0 +GET 0 "spouse
-DEL "​phoneNumbers"​ 0 +PUT "​phoneNumbers" ​"​type"​ "​mobile"​ 
-DEL "​phoneNumbers"​ 0+GET "​phoneNumbers" ​"type
 +PUT 0 "​children"​ 0 "​name"​ "John Snow
 +DEL "firstName"​ 
 +GET 0 "​firstName
 +DEL "notAkey
 +DEL 1 "​firstName"​ 
 +GET 0 "​phoneNumbers"​ 0 "​number"​ 
 +DEL "​phoneNumbers"​ 0 
 +GET 0 "​phoneNumbers"​ 0 "​number"​ 
 +DEL 0 "​spouse"​ 
 +DEL 0 "​address"​ 
 +GET 0 "​address"​ "​city"​
 </​code>​ </​code>​
        
Line 115: Line 143:
  
 <code cpp output> <code cpp output>
-JSON_NOT_A_KEY "​notAKey"​ +JSON_ARRAY 
-null +JSON_OBJECT
-true +
-25+
 "​John"​ "​John"​
 +25
 +true
 +null
 +GET_KEY_NOT_FOUND "​notAKey"​
 +"New York"
 +GET_KEY_NOT_FOUND "​notAKey"​
 +GET_KEY_NOT_FOUND "​notAKey1"​
 +GET_ERROR_NOT_ARRAY "​spouse"​
 JSON_OBJECT JSON_OBJECT
-"21 2nd Street"​ +"home"
-JSON_NOT_AN_OBJECT "​notAnObject"+
 JSON_ARRAY JSON_ARRAY
-JSON_OBJECT +GET_ERROR_INDEX_OUT_OF_RANGE "​children"​ 
-"office+PUT_ERROR_NOT_OBJECT root 
-JSON_NOT_AN_ARRAY ​"phoneNumbers+"aValue
-JSON_PUT_OK +GET_ERROR_NOT_OBJECT ​"address
-JSON_PUT_OK +null 
-JSON_PUT_OK +"​Jessica"​
-JSON_PUT_OK +
-JSON_PUT_OK +
-JSON_PUT_OK+
 "​mobile"​ "​mobile"​
-JSON_DEL_OK +PUT_ERROR_INDEX_OUT_OF_RANGE "​children"​ 
-JSON_DEL_NOT_A_KEY ​"notAkey+GET_KEY_NOT_FOUND ​"firstName
-JSON_DEL_OK +DEL_INDEX_OUT_OF_RANGE root 
-JSON_DEL_OK +"212 555-1234"​ 
-JSON_DEL_NOT_AN_ARRAY+"646 555-4567"​ 
 +GET_KEY_NOT_FOUND "​address"​ 
 </​code>​ </​code>​
 </​columns>​ </​columns>​
Line 144: Line 176:
  
 ===== Precizari ===== ===== Precizari =====
-Fisierele de test cu obiectele JSON sunt valide.+Fisierele de test cu obiectele JSON sunt valide, nu este nevoie sa faceti verificari suplimentare.
  
  
  
-==== Indicatii de implementare ==== +===== Indicatii de implementare ​===== 
-TODO+Executabilul vostru se va numi **tema3** si va primi exact 3 parametri: fisierul ce contine obiectul JSON, fisierul de input si fisierul de output.
  
  
  
-==== Teste publice ==== +===== Teste publice ​===== 
-Se vor publica pe data de 27 aprilie, ora 00:00.+[[http://​ocw.cs.pub.ro/​courses/​_media/​sd-ca/​teme/​sd2015_tema3_checker_v2.zip|Checker]]
  
  
Line 165: Line 197:
 Arhiva trebuie să conțină: Arhiva trebuie să conțină:
   * sursele voastre   * sursele voastre
 +  * Makefile
   * fisier **README** care să conțină detalii despre implementarea temei   * fisier **README** care să conțină detalii despre implementarea temei
 ===== Punctaj ===== ===== Punctaj =====
Line 195: Line 228:
  
 **A:** Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL **nu este permisă** **A:** Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL **nu este permisă**
- 
sd-ca/teme/teme-03.1429896736.txt.gz · Last modified: 2015/04/24 20:32 by razvan_madalin.matei
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0