This shows you the differences between two versions of the page.
|
pp:21:teme:target-search [2021/04/14 23:04] bot.pp |
pp:21:teme:target-search [2021/05/07 13:06] (current) bot.pp |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Haskell: Mobile target search ====== | ====== Haskell: Mobile target search ====== | ||
| - | * Deadline soft: 11.05.2021 | + | * Deadline soft: 16.05.2021 |
| * Deadline hard: 16.05.2021 | * Deadline hard: 16.05.2021 | ||
| * Data publicării: 14.04.2021 | * Data publicării: 14.04.2021 | ||
| - | * Data ultimei modificări: 14.04.2021 | + | * Data ultimei modificări: 23.04.2021 |
| + | * [[https://curs.upb.ro/mod/forum/view.php?id=267787|Forum temă]] | ||
| + | * vmchecker (în curând) | ||
| ===== Obiective ===== | ===== Obiective ===== | ||
| Line 17: | Line 19: | ||
| ==== Mobile target search ==== | ==== Mobile target search ==== | ||
| - | Jocul, inspirat din [[https://en.wikipedia.org/wiki/Among_Us|//Among Us//]], presupune existența un vânător care urmărește mai multe ținte, scopul fiind de a le captura. Jocul se desfășoară pe un teren bidimensional, ca în diagrama de mai jos: | + | Jocul, inspirat din //[[https://en.wikipedia.org/wiki/Among_Us|Among Us]]//, presupune existența un vânător care urmărește mai multe ținte, scopul fiind de a le captura. Jocul se desfășoară pe un teren bidimensional, ca în diagrama de mai jos: |
| <code> | <code> | ||
| Line 83: | Line 85: | ||
| Elementele care compun jocul, regulile de mutare și afișarea, se vor implementa în fișierul ''%%Basics.hs%%''. Va trebui să completați propriile definiții pentru tipurile de date și funcțiile din fișier, urmărind TODO-urile. | Elementele care compun jocul, regulile de mutare și afișarea, se vor implementa în fișierul ''%%Basics.hs%%''. Va trebui să completați propriile definiții pentru tipurile de date și funcțiile din fișier, urmărind TODO-urile. | ||
| - | Reprezentarea stării jocului sub formă de șir de caractere, în vederea afișării la consolă și a testării, va fi realizată definind funcția ''%%show :: Game -> String%%'', și va lua forma din diagramele de mai sus. | + | Reprezentarea stării jocului sub formă de șir de caractere, în vederea afișării la consolă și a testării, va fi realizată definind funcția ''%%gameAsString :: Game -> String%%'' (sinonim pentru funcția predefinită ''%%show%%''), și va lua forma din diagramele de mai sus. |
| Odată definite tipurile și funcțiile de mai sus, puteți citi indicațiile din secțiunea de **Rulare interactivă**, pentru a da comenzi de la tastatură //hunter//-ului. | Odată definite tipurile și funcțiile de mai sus, puteți citi indicațiile din secțiunea de **Rulare interactivă**, pentru a da comenzi de la tastatură //hunter//-ului. | ||
| Line 115: | Line 117: | ||
| </code> | </code> | ||
| - | Găsiți un tutorial de utilizare a celor două module în fișierul ''%%DemoSetPSQueue.hs%%''. | + | Găsiți un **tutorial** de utilizare a celor două module în fișierul ''%%DemoSetPSQueue.hs%%''. |
| Dacă, totuși, interpretorul generează eroare din cauză că nu găsește ultimul modul, puteți edita fișierul ''%%stack.yaml%%'' din instalarea ''%%stack%%'' și adăuga linia: | Dacă, totuși, interpretorul generează eroare din cauză că nu găsește ultimul modul, puteți edita fișierul ''%%stack.yaml%%'' din instalarea ''%%stack%%'' și adăuga linia: | ||
| Line 121: | Line 123: | ||
| <code> | <code> | ||
| extra-deps: [PSQueue-1.1.0.1] | extra-deps: [PSQueue-1.1.0.1] | ||
| + | |||
| + | </code> | ||
| + | O alternativă ar fi opțiunea ''%%--package%%''. Exemplu: | ||
| + | |||
| + | <code> | ||
| + | > stack exec ghci --package PSQueue TestMTS.hs | ||
| </code> | </code> | ||
| ==== Detalii și constrângeri de implementare ==== | ==== Detalii și constrângeri de implementare ==== | ||
| - | * **Atenție!** Funcțiile ''%%show%%'', ''%%successors%%'', ''%%suitableSuccs%%'', ''%%insertSuccs%%'' și ''%%extractPath%%'' trebuie implementate **fără recursivitate explicită**. Nerespectarea acestei cerințe va conduce la **penalizări** de 2p din 100 per funcție. | + | * **Atenție!** Funcțiile ''%%gameAsString%%'', ''%%successors%%'', ''%%suitableSuccs%%'', ''%%insertSuccs%%'' și ''%%extractPath%%'' trebuie implementate **fără recursivitate explicită**. Nerespectarea acestei cerințe va conduce la **penalizări** de 2p din 100 per funcție. |
| + | * Utilizați, pe cât posibil, **funcționale** și //**list comprehensions**//. | ||
| * Exploatați cu încredere **//pattern matching// și gărzi**, în locul //if//-urilor imbricate. | * Exploatați cu încredere **//pattern matching// și gărzi**, în locul //if//-urilor imbricate. | ||
| - | * Încercați să folosiți la maxim funcții predefinite din modulul [[https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-List.html|''%%Data.List%%'']]. Este foarte posibil ca o funcție de **prelucrare a listelor** de care aveți nevoie să fie deja definită aici. | + | * Încercați să folosiți la maxim funcții predefinite din modulul [[https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-List.html|Data.List]]. Este foarte posibil ca o funcție de **prelucrare a listelor** de care aveți nevoie să fie deja definită aici. |
| * Pentru **rularea testelor**, vedeți fișierul ''%%Readme%%''. | * Pentru **rularea testelor**, vedeți fișierul ''%%Readme%%''. | ||
| * Arhiva pentru **vmchecker** este suficient să conțină fișierele ''%%Basics.hs%%'' și ''%%Search.hs%%''. | * Arhiva pentru **vmchecker** este suficient să conțină fișierele ''%%Basics.hs%%'' și ''%%Search.hs%%''. | ||
| Line 133: | Line 142: | ||
| ==== Rulare interactivă ==== | ==== Rulare interactivă ==== | ||
| - | Pentru a putea vizualiza rezultatele implementării voastre, fișierul ''%%Interactive.hs%%'' vă pune la dispoziție două funcții: | + | Pentru a putea vizualiza rezultatele implementării voastre, fișierul ''%%Interactive.hs%%'' vă pune la dispoziție trei funcții: |
| * ''%%interactive%%'' poate fi folosită după implementarea **Părții 1** a temei, pentru a controla //hunter//-ul cu comenzi de la tastatură; | * ''%%interactive%%'' poate fi folosită după implementarea **Părții 1** a temei, pentru a controla //hunter//-ul cu comenzi de la tastatură; | ||
| Line 150: | Line 159: | ||
| ===== Changelog ===== | ===== Changelog ===== | ||
| + | |||
| + | * 23.04 (ora 15:35) - Adăugare constrângere ''%%extractPath%%'' | ||
| + | * 22.04 (ora 18:00) - Corectură la subtestul ''%%advanceGame 6%%'' | ||
| + | * 20.04 (ora 15:28) - Modificare mică pentru testarea ''%%suitableSuccs%%'' | ||
| + | * 16.04 (ora 10:15) - Clarificată distincția dintre funcțiile ''%%gameAsString%%'' și ''%%show%%''. | ||
| + | * 16.04 (ora 00:12) - Mențiune rulare. | ||
| + | * 15.04 (ora 09:22) - Actualizare schelet. | ||