Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.
Urmatoarea versiune | Versiuni anterioare | ||
17:teme:prolog-metro [2017/05/06 16:43] Andrei Olaru creat |
17:teme:prolog-metro [2017/05/20 22:00] (curent) Andrei Olaru [Changelog] |
||
---|---|---|---|
Linia 2: | Linia 2: | ||
* Responsabil: [[cs@andreiolaru.ro|Andrei Olaru]] | * Responsabil: [[cs@andreiolaru.ro|Andrei Olaru]] | ||
- | * Deadline soft: **19.05.2017**, apoi depunctare 0.5p/ zi | + | * Deadline soft: **22.05.2017**, apoi depunctare 0.5p/ zi |
* Deadline hard: __24.05.2017 ora 23.59__ | * Deadline hard: __24.05.2017 ora 23.59__ | ||
* Data publicării: 06.05.2017 | * Data publicării: 06.05.2017 | ||
* Data ultimei modificări: 06.05.2017 | * Data ultimei modificări: 06.05.2017 | ||
- | * Tema se va încărca pe vmchecker (în curând) | + | * Tema se va încărca pe [[http://vmchecker.cs.pub.ro|vmchecker]] |
- | * Data tester-ului: //în curând// | + | * Data tester-ului: 15.05.2017 |
* [[http://cs.curs.pub.ro/2016/mod/forum/view.php?id=5772|Forum temă]] | * [[http://cs.curs.pub.ro/2016/mod/forum/view.php?id=5772|Forum temă]] | ||
+ | * [[#changelog]] | ||
Linia 39: | Linia 40: | ||
Mai jos se găsește o tablă de joc de dimensiune 8x8: | Mai jos se găsește o tablă de joc de dimensiune 8x8: | ||
- | {{ :intern:17-tema-prolog:board.png?direct&500 | Tablă de joc 8x8}} | + | {{ .:board.png?direct&500 | Tablă de joc 8x8}} |
=== Cărțile din joc === | === Cărțile din joc === | ||
Linia 78: | Linia 79: | ||
Cele două trasee închise din exemplu aduc jucătorului punte după cum urmează: 5 puncte pentru traseul albastru, care trece de două ori printr-o carte; și 5 puncte pentru traseul verde. În total, 10 puncte. | Cele două trasee închise din exemplu aduc jucătorului punte după cum urmează: 5 puncte pentru traseul albastru, care trece de două ori printr-o carte; și 5 puncte pentru traseul verde. În total, 10 puncte. | ||
- | {{ :intern:17-tema-prolog:game.png?direct&500 |Exemplu de stare a jocului}} | + | {{ .:game.png?direct&500 |Exemplu de stare a jocului}} |
În acest exemplu, avem 6 cărți plasate pe hartă, având în spațiile ''(2, 1)'', ''(3, 1)'', ''(2, 2)'', ''(3, 2)'', ''(1, 3)'' și ''(2, 3)'' cărțile rotite ''(#5, R0)'', ''(#6, R0)'', ''(#7, R2)'', ''(#2, R1)'', ''(#9, R0)'' și respectiv ''(#3, R2)''. | În acest exemplu, avem 6 cărți plasate pe hartă, având în spațiile ''(2, 1)'', ''(3, 1)'', ''(2, 2)'', ''(3, 2)'', ''(1, 3)'' și ''(2, 3)'' cărțile rotite ''(#5, R0)'', ''(#6, R0)'', ''(#7, R2)'', ''(#2, R1)'', ''(#9, R0)'' și respectiv ''(#3, R2)''. | ||
Linia 146: | Linia 147: | ||
* ''pick_move'' -- va alege o mutare dintre mutările disponibile care implică o carte dată. **Pentru bonus** predicatul va alege mutarea conform cu o euristică, în ideea obținerii unui scor cât mai mare (trasee cât mai lungi). | * ''pick_move'' -- va alege o mutare dintre mutările disponibile care implică o carte dată. **Pentru bonus** predicatul va alege mutarea conform cu o euristică, în ideea obținerii unui scor cât mai mare (trasee cât mai lungi). | ||
* ''play_game'' -- desfășoară un joc complet, pornind de la starea inițială a jocului. Pentru a obține o carte care să fie plasată, se va folosi obligatoriu predicatul ''next_tile(+Time, -TID)'', în apelul căruia primul argument va fi legat la numărul de mutări realizate până la momentul curent (pentru obținerea primei cărți va fi 0, pentru obținerea celei de-a doua va fi 1, etc). | * ''play_game'' -- desfășoară un joc complet, pornind de la starea inițială a jocului. Pentru a obține o carte care să fie plasată, se va folosi obligatoriu predicatul ''next_tile(+Time, -TID)'', în apelul căruia primul argument va fi legat la numărul de mutări realizate până la momentul curent (pentru obținerea primei cărți va fi 0, pentru obținerea celei de-a doua va fi 1, etc). | ||
+ | * ''next_tile'' poate fi apelat doar pentru momentul de timp la care s-a ajuns; de exemplu, inițial se va putea apela ''next_tile(0, T0)'', apoi pentru următoarea carte din teancul de cărți se va apela ''next_tile(1, T1)'', etc; | ||
+ | * pentru ajutor la testare, folosiți predicatele ''tt_reset_stack/0'' pentru a reseta teancul de cărți și ''tt_set_tile_range/1'' pentru a da lista de identificatori de cărți din care ''next_tile'' va întoarce cărți; | ||
+ | * ''play_game'' trebuie să reușească întotdeauna; dacă nu se mai poate realiza nicio mișcare, ''play_game'' se va întoarce, obținând starea jocului la care s-a ajuns. | ||
Linia 160: | Linia 164: | ||
* **Atenție!** Lucrați doar în fișierul ''T3.pl'' | * **Atenție!** Lucrați doar în fișierul ''T3.pl'' | ||
* Imediat după descărcarea arhivei, editați fișierul și scrieți-vă pe prima linie numele, prenumele și grupa. | * Imediat după descărcarea arhivei, editați fișierul și scrieți-vă pe prima linie numele, prenumele și grupa. | ||
+ | |||
+ | |||
+ | * În versiunea trimisă de fișier, nu lăsați variabile de tip singleton (Prolog vă dă warning pentru ele). | ||
+ | * Pentru debugging, puteți include trace / notrace și în fișierul de testare, pentru a vă fi mai ușor să porniți trace-ul exact acolo unde este util. Însă când trimiteți nu uitați că | ||
+ | * la testare se va folosi fișierul de testare original; | ||
+ | * trebuie să eliminați orice element de debugging (trace, debug) din fișierul sursă. | ||
+ | |||
+ | |||
* {{:17:teme:metro-start.zip|Arhiva de pornire}} | * {{:17:teme:metro-start.zip|Arhiva de pornire}} | ||
Linia 171: | Linia 183: | ||
* 6.05 -- Publicare temă. | * 6.05 -- Publicare temă. | ||
+ | * 9.05 (noaptea) -- Adăugare tester pentru primele 80 de puncte | ||
+ | * 12.05 11:00 -- Actualizare tester, pentru primele 100 de puncte | ||
+ | * corecția numărului corect de mutări disponibile în testele 41/1 și 41/2. | ||
+ | * adăugarea de câteva [[#precizări]]. | ||
+ | * adăugarea observațiilor legate de predicatul [[#desfasurarea-jocului1|''play_game'']]. | ||
+ | * 15.05 -- Actualizare tester, configurare vmchecker. | ||
+ | * 20.05 -- Testele de bonus și în arhiva de pe wiki, cu scuze. |