Differences

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

Link to this comparison view

poo-ca-cd:teme:2025:8e211bfe-f6eb-467c-9e54-f8e6df4c1535:tema-1 [2025/10/03 21:19]
ioana.tudorache2507
poo-ca-cd:teme:2025:8e211bfe-f6eb-467c-9e54-f8e6df4c1535:tema-1 [2025/10/04 03:42] (current)
ioana.tudorache2507 [printMap]
Line 51: Line 51:
  
   - __Mediul evoluează automat__ – fenomene naturale care se petrec fără intervenția robotului   - __Mediul evoluează automat__ – fenomene naturale care se petrec fără intervenția robotului
 +     * calitatea aerului, a solului și a apei se modifică în timp (în aceasta ordine)
      * plantele își schimbă starea (pot crește și se pot ofili)      * plantele își schimbă starea (pot crește și se pot ofili)
      * animalele se deplasează și își schimbă starea (consumă plante sau apă ca să nu fie flămânde)      * animalele se deplasează și își schimbă starea (consumă plante sau apă ca să nu fie flămânde)
-     * calitatea aerului, a apei și a solului se modifică în timp 
   - __TerraBot ia decizii și acționează__ – sub controlul comenzilor primite:   - __TerraBot ia decizii și acționează__ – sub controlul comenzilor primite:
     * se deplasează pe hartă     * se deplasează pe hartă
Line 90: Line 90:
   *  Fiecare celulă a hărții poate conține **maximum o plantă, un animal și o sursă de apă**.   *  Fiecare celulă a hărții poate conține **maximum o plantă, un animal și o sursă de apă**.
 </​note>​ </​note>​
 +
 +===== Entități =====
 +
 +==== Plant ====
 +
 +==== Animal ====
 +
 +==== Water ====
 +
 +==== Soil ====
 +
 +==== Air ====
  
  
 ===== Comenzi ===== ===== Comenzi =====
 +
 +==== Comenzi pentru simulare ====
 +
 +=== startSimulation ===
 +
 +  * marcheaza inceperea unei simulari
 +  * robotul porneste **mereu** de pe **pozitia [0, 0] a hartii**
 +
 +
 +Mesaje posibile pentru aceasta comanda:
 +
 +  * ''​%%"​Simulation has started."​%%''​
 +  * ''​%%"​ERROR:​ Simulation already started. Cannot perform action"​%%''​
 +
 +== Input ==
 +
 +<spoiler Click pentru input startSimulation>​
 +<code json>
 +{
 +    "​command":​ "​startSimulation",​
 +    "​timestamp":​ 1
 +}
 +</​code>​
 +</​spoiler>​
 +
 +== Output ==
 +
 +<spoiler Click pentru output startSimulation>​
 +<code json>
 +{
 +    "​command":​ "​startSimulation",​
 +    "​message":​ "​Simulation has started.",​
 +    "​timestamp":​ 1
 +}
 +</​code>​
 +</​spoiler>​
 +
 +\\
 +
 +=== endSimulation===
 +
 +  * marcheaza sfarsitul unei simulari
 +
 +
 +Mesaje posibile pentru aceasta comanda:
 +
 +  * ''​%%"​Simulation has ended."​%%''​
 +  * ''​%%"​ERROR:​ Simulation not started. Cannot perform action"​%%''​
 +
 +== Input ==
 +
 +<spoiler Click pentru input startSimulation>​
 +<code json>
 +{
 +    "​command":​ "​endSimulation",​
 +    "​timestamp":​ 10
 +}
 +</​code>​
 +</​spoiler>​
 +
 +== Output ==
 +
 +<spoiler Click pentru output startSimulation>​
 +<code json>
 +{
 +    "​command":​ "​endSimulation",​
 +    "​message":​ "​Simulation has ended.",​
 +    "​timestamp":​ 10
 +}
 +</​code>​
 +</​spoiler>​
 +
 +\\
 +==== Comenzi pentru mediu ====
 +
 +
 +=== changeWeatherConditions===
 +
 +  * marcheaza un fenomen meteo care produce schimbari pentru aer
 +  * Valorile posibile pentru tipul de schimbare meteo:
 +     * desertStorm ->  desert air
 +     * peopleHiking -> mountain air
 +     * newSeason -> temp air
 +     * polarStorm -> polar air
 +     * rainfall -> tropical air
 +
 +<note important>​Schimbarea meteo se ia in considerare **DOAR** pentru celulele ce au acel tip de aer</​note>​
 +
 +Mesaje posibile pentru aceasta comanda:
 +
 +  * ''​%%"​The weather has changed."​%%''​
 +  * ''​%%"​ERROR:​ The weather change does not affect the environment. Cannot perform action"​%%''​
 +  * ''​%%"​ERROR:​ Simulation not started. Cannot perform action"​%%''​
 +
 +== Input ==
 +
 +<spoiler Click pentru input changeWeatherConditions>​
 +<code json>
 +{
 +    "​command":​ "​changeWeatherConditions",​
 +    "​type":​ "​desertStorm",​
 +    "​windSpeed":​ 25.0,
 +    "​timestamp":​ 10
 +},
 +{
 +    "​command":​ "​changeWeatherConditions",​
 +    "​type":​ "​rainfall",​
 +    "​rainfall":​ 12.5,
 +    "​timestamp":​ 11
 +},
 +{
 +    "​command":​ "​changeWeatherConditions",​
 +    "​type":​ "​peopleHiking",​
 +    "​numberOfHikers":​ 40,
 +    "​timestamp":​ 12
 +}
 +</​code>​
 +</​spoiler>​
 +
 +== Output ==
 +
 +<spoiler Click pentru output changeWeatherConditions>​
 +<code json>
 +{
 +    "​command":​ "​changeWeatherConditions",​
 +    "​message":​ "The weather has changed.",​
 +    "​timestamp":​ 10
 +},
 +{
 +    "​command":​ "​changeWeatherConditions",​
 +    "​message":​ "The weather has changed.",​
 +    "​timestamp":​ 11
 +},
 +{
 +    "​command":​ "​changeWeatherConditions",​
 +    "​message":​ "The weather has changed.",​
 +    "​timestamp":​ 12
 +}
 +</​code>​
 +</​spoiler>​
 +
 +\\
 +==== Comenzi pentru TerraBot ====
 +
 +==== Comenzi de debug ====
 +
 +==== getEnergyStatus====
 +
 +  * returnează energia curenta a TerraBot-ului
 +
 +Mesaje posibile pentru aceasta comanda:
 +
 +  * ''​%%"​TerraBot has ${energy_points} energy points left."​%%''​
 +  * ''​%%"​ERROR:​ Simulation not started. Cannot perform action"​%%''​
 +
 +== Input ==
 +
 +<spoiler Click pentru input getEnergyStatus>​
 +<code json>
 +{
 +    "​command":​ "​getEnergyStatus",​
 +    "​timestamp":​ 8
 +}
 +</​code>​
 +</​spoiler>​
 +
 +== Output ==
 +
 +<spoiler Click pentru output getEnergyStatus>​
 +<code json>
 +{
 +    "​command":​ "​getEnergyStatus",​
 +    "​message":​ "​TerraBot has 189 energy points left.",​
 +    "​timestamp":​ 8
 +}
 +</​code>​
 +</​spoiler>​
 +
 +\\
 +
 +==== printEnvConditions====
 +
 +
 +  * se printeaza pentru patratica curenta urmatoarele:​
 +      * tipul de planta, daca exista ​
 +      * tipul de animal, daca exista
 +      * tipul de sursa de apa, daca exista
 +      * componenta solului
 +      * componenta aerului
 +
 +
 +== Input ==
 +
 +<spoiler Click pentru input printEnvConditions>​
 +<code json>
 +{
 +    "​command":​ "​printEnvConditions",​
 +    "​timestamp":​ 5
 +}
 +</​code>​
 +</​spoiler>​
 +
 +== Output ==
 +
 +<spoiler Click pentru output printEnvConditions>​
 +<code json>
 +{
 +    "​command":​ "​printEnvConditions",​
 +    "​output"​ : {
 +        "​soil":​ {
 +            "​type":​ "​ForestSoil",​
 +            "​nitrogen":​ 3.2,
 +            "​waterRetention":​ 0.55,
 +            "​soilpH":​ 6.8,
 +            "​organicMatter":​ 0.4,
 +            "​leafLitter":​ 0.3
 +        },
 +        "​plant":​ {
 +            "​type":​ "​Algae",​
 +            "​name":​ "​RedAlgae",​
 +        },
 +        "​animal":​ {
 +            "​type":​ "​Herbivores",​
 +            "​name":​ "​Cow"​
 +        },
 +        "​water":​ {
 +            "​type":​ "​lake",​
 +            "​purity":​ 92.0,
 +            "​salinity":​ 0.5,
 +            "​turbidity":​ 4,
 +            "​contaminantIndex":​ 1.5,
 +            "​pH":​ 6.8,
 +            "​isFrozen":​ false,
 +        },
 +        "​air":​ {
 +            "​type":​ "​Tropical Air",
 +            "​mass":​ 1500000.0,
 +            "​humidity":​ 85.0,
 +            "​temperature":​ 30.5,
 +            "​oxygenLevel":​ 21,
 +            "​co2Level":​ 400.0
 +        }
 +    },
 +    "​timestamp":​ 5
 +}
 +</​code>​
 +</​spoiler>​
 +
 +\\
 +==== printMap====
 +
 +  * se printeaza pentru fiecare patratica de pe harta urmatoarele:​
 +      * nr total enitati de pe patratica (sum(plant, animal, water_source))
 +      * calitate aerului
 +      * calitatea solului ​
 +
 +Mesaje posibile pentru aceasta comanda:
 +
 +  * ''​%%"​Simulation has ended."​%%''​
 +  * ''​%%"​ERROR:​ Simulation not started. Cannot perform action"​%%''​
 +
 +== Input ==
 +
 +<spoiler Click pentru input printMap>​
 +<code json>
 +{
 +    "​command":​ "​printMap",​
 +    "​timestamp":​ 23
 +}
 +</​code>​
 +</​spoiler>​
 +
 +== Output ==
 +
 +<spoiler Click pentru output printMap>​
 +<code json>
 +{
 +    "​command":​ "​endSimulation",​
 +    "​message":​ "​Simulation has ended.",​
 +    "​timestamp":​ 10
 +}
 +</​code>​
 +</​spoiler>​
 +
 +\\
 +==== printKnowledgeBase====
 +
 +  * afiseaza pentru fiecare tip de obiect fact-urile invata ​
 +     * exemplu: s-a scanat si invatat despre red algae, se printeaza toate facts despre red algae
 +
 +===== Exemplu simulare =====
 +
 +
 +===== Scheletul de cod ===== 
 +
 +În rezolvarea temei va fi nevoie de folosirea unor obiecte pentru stocarea și maparea datelor primite în format JSON. Scheletul temei vă oferă mai multe clase utile pentru ​ citirea și rularea temei. Acestea se regăsesc în cadrul scheletului astfel:
 +  * Clasele de input din cadrul pachetului fileio : Acestea se vor folosi pentru parsarea datelor de input. Astfel preluați toate informațiile necesare pentru a crea propriile clase pentru rezolvarea temei.
 +  * Clasa Main care este punctul de intrare pentru logica de rezolvare a temei.
 +
 +Pentru a întelege mai bine cum funcționează citirea/​scrie în fișierele JSON vă recomandăm să citiți [[https://​ocw.cs.pub.ro/​courses/​poo-ca-cd/​laboratoare/​tutorial-json-jackson | Json & Jackson]].
 +
 +<note tip> Implementarea voastră va începe din funcția **Main.action**,​ unde veți adăuga în **ArrayNode output** pe parcursul execuției toate output-urile comezilor date. **De asemenea, aveți un mic exemplu în schelet despre cum puteți face asta.** </​note>​
 +
 +<note important>​Output-ul nu trebuie formatat ca în ref-uri, fiindcă se verifică conținutul obiectelor și array-urilor JSON, nu textul efectiv. Cu toate acestea, dacă folosiți Jackson, vă recomandăm să utilizați **PrettyPrinter** [[https://​fasterxml.github.io/​jackson-databind/​javadoc/​2.7/​com/​fasterxml/​jackson/​databind/​ObjectMapper.html#​writerWithDefaultPrettyPrinter() | Documentație PrettyPrinter]]. Totodată, pentru a înțelege cum se poate realiza **scrierea în fișierele JSON de output**, vă sugerăm să consultați [[https://​attacomsian.com/​blog/​jackson-create-json-array|JSON Array]].</​note>​
 +
 +<note tip> Aveți în folder-ul **"​lib"​** toate dependințele necesare pentru rularea temei, mai exact bibliotecile Jackson.</​note>​
 +
 +===== Execuția temei =====
 +
 +  - Se încarcă datele citite din fișierul de test, în format JSON, în obiecte. ​
 +  - Se primesc secvențial acțiuni și se execută pe măsură ce sunt primite, rezultatul lor având efect asupra Repository-ului.
 +  - După executarea unei acțiuni, se afișează rezultatul ei în fișierul JSON de ieșire. ​
 +  - La terminarea tuturor acțiunilor se termină și execuția programului.
 +
 +
 +<note warning>
 +  * După ce clonați repo-ul de pe GitHub, vă rugăm să vă faceți un repository propriu privat în care să vă puneți doar conținutul folder-ului **"​tema"​** de pe repo-ul echipei de POO. Dacă nu puneți folder-ul cu tema la alta cale, **nu o să puteți** să faceți schimbări in Git, deoarece vă aflați în rădăcina repository-ului echipei de POO.
 +  * Pentru ca checker-ul să funcționeze trebuie să deschideți tema din Intellij la calea unde se află folderele **"​src"​**,​ **"​lib"​**,​ **"​ref"​**,​ **"​input"​**. Aveți folder-ul **.idea** pregenerat ca să vă ajute in acest sens. De asemenea, fișier-ul **.iml** contine calea către bibliotecile Jackson. Dacă aveți probleme stergeți folder-ul .idea si fișierul .iml si generațile voi din nou din Intellij.
 +</​note>​
 +
 +===== Recomandări =====
 +
 +  * Tema a fost concepută pentru a vă testa cunoștințele dobândite în urma parcurgerii laboratoarelor 1-3, aceasta putând fi rezolvată doar cu noțiunile invățate din acele laboratoare.
 +  * Tema fiind o specificație destul de stufoasă recomandăm citirea de cel putin două ori a enunțului inainte de inceperea implementării.
 +  * Pentru depanarea diferențelor dintre output-ul vostru si fișierele ref, vă recomandăm [[https://​www.jsondiff.com/​|acest site]].
 +
 +<note important>​Verificați periodic această pagină, deoarece scheletul/​cerința pot suferi modificări în urma unor erori din partea noastră.</​note>​
 +
 +===== Evaluare =====
 +
 +Punctajul constă din:
 +  * 80p implementare - trecerea testelor
 +  * 10p coding style (vezi checkstyle)
 +  * 5p README clar, concis, explicații axate pe design (flow, interacțiuni)
 +  * 5p folosire git pentru versionarea temei
 +
 +<note important>​Pe pagina [[poo-ca-cd:​administrativ:​barem_teme|Indicații pentru teme]] găsiți indicații despre scrierea readme-ului și 
 + ​**baremul folosit la corectarea temei**. Vă incurajăm să treceți prin el cel puțin odată. </​note>​
 +
 +<note important>​ Pentru a primi punctajul pentru **Git**, după ce ați terminat tema și ați făcut toate commit-urile,​ executați comanda ''​git log > git_log.txt''​ in rădăcina proiectului și adăugați fisierul in arhiva trimisă. </​note>​
 +
 +<note tip>​Pentru folosirea tool-ului **Git** vă punem la dispoziție un tutorial actualizat și amplu despre el la acest [[poo-ca-cd:​resurse-utile:​tutorial-git|link]] și aveți de asemenea și un tutorial despre comenzile pe care puteți să le dați din IntelliJ la acest [[poo-ca-cd:​resurse-utile:​tutorial-intellij-git|link]].</​note>​
 +
 +Depunctările pentru **designul și organizarea codului** se vor scădea din punctajul testelor. Dacă vor apărea depunctări specifice temei în momentul evaluării, nemenționate pe pagina cu depunctări generale, ele se vor încadra în limitele de maxim 10p pentru design, 5p pentru readme. Dacă tema nu respecta cerințele, sau are zero design OOP atunci se pot face depunctari suplimentare.
 +
 +Folosirea git pentru versionare va fi verificata din folderul .git pe care trebuie să îl includeți în arhiva temei. Punctajul se va acorda dacă ați făcut **minim 3 commit-uri relevante și cu mesaj sugestiv**. **NU** este permis să aveți repository-urile de git publice până la deadline-ul hard.
 +
 +**Bonusuri:​**
 +La evaluare, putem oferi bonusuri pentru design foarte bun, cod bine documentat dar și pentru diverse elemente suplimentare alese de voi.
 +
 +<note warning>
 +  * Temele vor fi testate împotriva plagiatului. Orice tentativă de copiere va duce la **anularea punctajului** de pe parcursul semestrului şi **repetarea materiei** atât pentru sursă(e) cât şi pentru destinație(ii),​ fără excepție.
 +  * **Aveți grijă să nu puneți pe Vmchecker fișiere .idea sau .iml**.
 +</​note>​
 +
 +==== Checkstyle ====
 +
 +Unul din obiectivele temei este învățarea respectării code-style-ului limbajului pe care îl folosiți. Aceste convenții (de exemplu cum numiți fișierele, clasele, variabilele,​ cum indentați) sunt verificate pentru temă de către tool-ul [[https://​checkstyle.sourceforge.io/​|checkstyle]].
 +
 +Pe pagina de [[:​poo-ca-cd:​administrativ:​coding_style_ide|Recomandări cod]] găsiți câteva exemple de coding style.
 +
 +Dacă numărul de erori depistate de checkstyle depășește 30, atunci punctele pentru coding-style nu vor fi acordate. Dacă punctajul este negativ, //acesta se trunchiază la 0//.
 +
 +Exemple:
 +  * ''​punctaj_total = 100''​ și ''​nr_erori = 200''​ => ''​nota_finala = 90''​
 +  * ''​punctaj_total = 100''​ și ''​nr_erori = 29''​ => ''​nota_finala = 100''​
 +  * ''​punctaj_total = 80''​ și ''​nr_erori = 30''​ => ''​nota_finala = 80''​
 +  * ''​punctaj_total = 80''​ și ''​nr_erori = 31''​ => ''​nota_finala = 70''​
 +
 +
 +===== Upload temă =====
 +
 +Arhiva o veţi urca pe [[https://​curs.upb.ro/​2024/​mod/​assign/​view.php?​id=57526|VMChecker]],​ unde sunt si informații despre structura ei.
 +
 +===== FAQ =====
 +
 +**Q**: Pot folosi biblioteca "​X"?​\\
 +**A**: Dacă doriți să folosiți o anumită bibliotecă vă recomandăm să întrebați pe forum, ca apoi să o validăm și să o includem și pe Vmchecker.
 +
 +**Q**: Am descoperit edge case-ul "​Y",​ trebuie să îl tratez?\\
 +**A**: Nu. Toate datele necesare pentru soluționarea temei vă sunt date in cerință. Dacă totuși am omis ceva ne puteți contacta pe forum.
 +
 +**Q**: Pot folosi clase de tip "​Enum"​ pentru constante?​\\
 +**A**: Da.
 +
 +**Q**: Ce JDK recomandați?​\\
 +**A**: 25
 +
 +**Q**: Pot să fac în orice ordine testele?\\
 +**A**: Da! Testele au fost concepute sa fie cât mai decuplate și să testeze câte o funcționalitate în întregime. Cu toate astea, vă recomandăm să implementați mai întâi testele 01, 02, 03 deoarece reprezintă funcționalitățile de bază pentru rezolvarea următoarelor teste mai complexe.
 +===== Resurse și linkuri utile =====
 +
 +  * [[todo|Schelet de cod]]
 +  * [[todo|Forum]] ​
 +  * [[poo-ca-cd:​administrativ:​barem_teme|Indicații pentru teme]]
 +  * [[poo-ca-cd:​administrativ:​coding_style_ide|Recomandări coding style & javadoc]]
 +
 +
  
poo-ca-cd/teme/2025/8e211bfe-f6eb-467c-9e54-f8e6df4c1535/tema-1.1759515567.txt.gz · Last modified: 2025/10/03 21:19 by ioana.tudorache2507
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