Differences

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

Link to this comparison view

pp:21:teme:target-search [2021/04/14 00:22]
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: ​ziua laboratorului 10+  * Deadline ​soft16.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 16: Line 19:
 ==== Mobile target search ==== ==== Mobile target search ====
  
-Jocul 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 82: 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 114: 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 120: 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.
   * 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 131: 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 138: Line 149:
  
 Toate acestea utilizează funcția ''​%%loadGame%%''​ din fișierul ''​%%Terrain.hs%%''​. Toate acestea utilizează funcția ''​%%loadGame%%''​ din fișierul ''​%%Terrain.hs%%''​.
 +
 +==== Timeline ====
 +
 +Trimiterea temei **NU** se va face în etape, dar scheletul este foarte **structurat** și vă permite să progresați constant. Sugestia noastră este să finalizați **Partea 1** a temei în jurul zilei **laboratorului 8**.
  
 ===== Resurse ===== ===== Resurse =====
  
-  * Schelet și checker+  * [[https://​ocw.cs.pub.ro/​courses/​_media/​pp/​21/​teme/​haskell/​mts.zip|Schelet și checker]]
  
 ===== 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.
  
  
pp/21/teme/target-search.1618348938.txt.gz · Last modified: 2021/04/14 00:22 by bot.pp
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