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 21:22]
razvan_madalin.matei [Reguli pentru trimitere]
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
  
-Ati fost angajati pentru o firma care se ocupa cu generarea ​de statistici despre traficul web. Datele despre traficul web sunt stocate sub forma de obiecte JSON. Treaba voastra ​este sa automatizati procesul ​de interogare si manipulare ​obiectelor ​JSON. +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 ​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 =====
Line 34: Line 43:
  
 <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 manipulare 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. 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 154: Line 186:
  
 ===== 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 196: 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.1429899743.txt.gz · Last modified: 2015/04/24 21:22 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