Clasele 9-12 lecția 31 - 27 mai 2015
Concursul de programe de 4-poker
Reguli și specificații: Concurs de programe de 4-poker
Termenul-limită pentru trimiterea surselor este 27 mai, ora 00:00 (deci la începutul zilei de miercuri).
Vă îndemn să nu amânați pe ultimul moment, căci nu este genul de program care poate fi scris într-o oră.
De asemenea, trimiteți-mi din timp variante, ca să vă confirm că joacă bine (că termină cu bine partidele).
Concursul se va desfășura cu grupele reunite, între 12:30 și 14:30.
Clasament
Am rulat concursul pe 4.000 de pachete. Felicitări primilor (și singurilor) 4 clasați:
Loc | Concurent | Punctaj mediu pe pachet |
---|---|---|
0 | Dumnezeu | 79.397 |
1 | Radu Muntean | 28.139 |
2 | Alex Amarandei | 27.480 |
3 | Alex Văleanu | 27.100 |
4 | Mircea Sebe | 20.426 |
Am petrecut restul cercului inspectând diverse partide și discutând despre strategii implementate și neimplementate.
Dumnezeu este nedeterminist
Cum este calculat scorul lui Dumnezeu în tabelul de mai sus? El este scorul maxim pe care l-ar putea obține un jucător care știe exact cum să așeze cărțile pe fiecare linie. Subliniez că jucătorul nu poate reamesteca pachetul (ca să-și dea patru chinte roiale, de exemplu). Dar el poate, nedeterminist, să încerce toate cele 24 de posibilități pe liniile 2, 3, 4 și 5.
Este un scor util ca să vă faceți o idee despre cât de aproape de optim joacă programul vostru. M-aș fi bucurat să încercați și singuri aceasta.
Arhivă
Iată arhiva întregului concurs: Media:4-poker.tar.xz (2,2 MB). Atenție, s-ar putea să aveți probleme la decomprimare, căci conține directoare cu câte 10.000 de fișiere.
Descrierea arhivei, pe scurt:
- arbiter.php rulează, în tandem, binarul dealerului și binarul jucătorului, până când jucătorul termină cu bine sau expiră timpul sau jucătorul face o greșeală.
- contest.php citește fișierele de ieșire ale concurenților, rundă cu rundă, și afișează scorurile după fiecare rundă. Poate fi extins ca să se oprească după rundele „interesante” și să permită vizualizarea partidelor. Puteți modifica numărul de runde (asigurați-vă că toate programele-concurent au fost evaluate pe minim acel număr de runde).
- dealer.cpp citește un pachet de cărți și le tipărește, una câte una, la ieșirea standard. Apoi așteaptă răspunsul la intrarea standard și îl validează. La final, salvează partida în fișierul specificat în linia de comandă.
- decks/ conține 10.000 de pachete de cărți (nu am avut timp să evaluez toate sursele pe toate pachetele, ci doar pe 4.000). Pachetele sunt stocate ca permutări ale mulțimii 0...23, iar dealerul convertește aceasta în cărți de joc.
- evalBinary.sh rulează un binar al jucătorului pe toate pachetele. Puteți configura numărul de pachete.
- games/ conține câte un subdirector pentru fiecare concurent care a fost evaluat. În acel subdirector se află partidele salvate, atâtea câte au fost evaluate.
- optimal/ conține partidele lui Dumnezeu.
- sources/ conține sursele concurenților, precum și binarele compilate.
- old-sources/ conține versiuni anterioare ale surselor concurenților (le-am scos din concurs din lipsă de timp).
- theoreticalBest.cpp este programul care analizează toate cele 24*24*24*24 de permutări ale liniilor 2-5 pentru a calcula scorul optim pentru un pachet.
- tools/ conține diverse unelte - generatorul de pachete, un viewer în mod text/ANSI etc.
De aprofundat
Este mult loc pentru îmbunătățiri. În special, nimeni nu a folosit acel fișier permis, de 10 MB pentru date precalculate. Am discutat puțin în clasă despre ce puteați stoca acolo.