Tankide Turniir

Tankide turniir on avalik võistlus, kus igaüks saab kirjutada tankiprogrammi. Tankid võitlevad omavahel ja parim saab võita auhinna. Siit saab alla laadida vajalikud materjalid: http://targotennisberg.com/tankid/

Programmide lähtekood on ka saadaval, et asja uurida või mõne teise platvormi jaoks kompileerida.

Kui keegi esitab uue programmi (või senine võistleja esitab uue versiooni oma programmist), jooksutatakse turniiri järgist etappi. Turniiril osalevad uus programm ja eelmise etapi 8 parimat - kokku 9 tanki. Pärast seda panen üles uue edetabeli ja logi, mille põhjal analüüsida, kuidas sinu tankil läks. Teiste tankide lähtekoodi näha ei saa, kõik järeldused tuleb teha logide põhjal. Logide visualiseerija joonistab ka graafilise pildi, kus on näha, mida tankid mingil hetkel tegid.

Küsimuste puhul kirjutage targot@gmail.com

Reeglid

Etapid koosnevad voorudest, mille käigus tankid võitlevad. Võitlusi on kaht liiki: sellised, kus tankid võitlevad üks ühe vastu, ja sellised, kus kõik tankid on korraga väljakul.

Üks voor kestab, kuni

Igas etapis mängivad kõik osalised omavahel üks ühe vastu 100 vooru ning kõik kõigi vastu 1000 vooru. Kõigi voorude punktid liidetakse.

Väljak

Väljak on juhusliku suurusega ristkülik, mis koosneb ruutudest. Igal ruudul on kõrgus, mis on täisarv 4 kuni 7. Kõrgematelt ruutudelt saab tugevamini tulistada. Nurga- ja servaruudud on üldjuhul madalamad, see tasakaalustab asjaolu, et neid on kergem kaitsta.

Alguses paigutatakse tankid väljakule juhuslikesse asukohtadesse, aga kõik on näoga põhja suunas. Igal tankil on alguses 20 elu.

Käigud

Võitlus on simultaneous turn-based – igaüks ütleb oma käigu ja käigud tehakse korraga.

Võimalikud käigud on:

Programmid peavad oma käigud väljastama standardväljundisse. Tähelepanu! Käigu lõppu tuleb panna reavahetus!

Võimalikud suunad on kaheksa ilmakaart – N=0, NE=1, E=2, SE=3, S=4, SW=5, W=6 ja NW=7. Käigud toimuvad järjekorras: kõik liikumised, kõik tulistamised, kõik vaatamised. See tähendab, et kui käigu alguses oli vastane sinu tulejoonel, võib ta sealt enne sinu tulistamist ära sõita ja vaatamise tulemus on käigu lõpu seisuga.

Käigu tegemiseks on aega 0,1 sekundit. Kui selle ajaga käiku ei tehta, siis loetakse sinu tank surnuks ja programmi töö lõpetatakse.

Liikumine

Tank võib liikuda ühe sammu igas kaheksast suunast. Väljakult välja liikuda proovimine jätab tanki paigale. Kui tankid põrkavad kokku, kaotavad mõlemad 3 elu. Kui kokku põrkavad rohkem kui 2 tanki korraga, kaotavad nad ka vastavalt rohkem elusid. Kokkupõrge toimub, kui

Kokkupõrke järel jäävad tankid oma esialgsele ruudule.

Tulistamine

Tank võib tulistada igas kaheksast suunast. Lasu maksimaalne kaugus on tulistaja kõrgus miinus üks. Korraga võib pihta saada ainult ühele (lähimale) vastasele. Iga pihtasaadud lask vähendab vastase elusid vastavalt lasu kaugusele ja tulistaja kõrgusele. Pihta läinud lask võtab ära <tulistaja kõrgus>-<lasu kaugus> elu. Surnud tanke väljakult ei eemaldata.

Vaatamine

Vaatamine toimub 90-kraadiste sektorite kaupa. Kui vaatad näiteks N suunas, siis näed kõiki tanke, mis asuvad suundades NW kuni NE (diagonaalid kaasa arvatud). Kui vaatad SE suunas, siis näed kõiki tanke, mis asuvad suundades E kuni S jne. Vaatamise kaugus ei ole piiratud.

Punktid

Iga tank saab punkte vastavalt sellele, kui palju ta teisi tanke kahjustada suutis, kas siis tulistamise või kokkupõrgetega.

Kui vooru lõpuks jääb ellu täpselt üks tank, saab ta lisapunkte – üks ühe vastu võitluse eest 10 ja kõik kõigi vastu võitluse eest 20. Voorude punktid liidetakse.

Programmid

Programmid kasutavad standardsisendit ja standardväljundit.

Sisendi esimesel real on 5 tühikutega eraldatud täisarvu:

Järgmistel N real on igaühel M tühikutega eraldatud täisarvu, mis tähistavad väljaku ruutude kõrgusi. Esimesena on toodud rida nr 1.

Edasi tuleb väljundisse kirjutada üks string, mis tähistab sinu käiku. Vaatamiseks kirjuta väljundisse L<suund>, liikumiseks M<suund> ja tulistamiseks F<suund>, näiteks L0, M5 või F7. Vigast väljundit ignoreeritakse ja sa kaotad oma käigu.

Järgmiseks loe sisendist käigu tulemus. Tulemuseks on ühel real hulk tühikutega eraldatud täisarve. Esimeseks tuleb täisarv, mis näitab sinu allesolevaid elusid. Järgmiseks tulevad T täisarvu, mis tähistavad vastaste alles olevaid elusid. Kui mõni vastane on surnud, on seal 0. Vastaste info on alati samas järjekorras.

Kui tank on surnud või voor lõppeb, siis programmi töö lõpetatakse automaatselt.

Testimine

Testimiseks võib kasutada programmi Turniir.exe. Sellele tuleb argumentidena ette anda voorude arv ning kõigi tankiprogrammide nimed. Sama programmi võib ette anda ka mitu korda. Kui tahad katsetada pythoni programmiga, anna turniir.exe-le argumendina ette "python minuprogramm.py" - jutumärgid tuleb ka panna! Turniiriprogramm kirjutab oma tulemuse logifailidesse, mida saab siis uurida. Samuti on logide visualiseerimiseks programm Visualizer.exe, millele saab ette anda logifaili nime, ning mis loob seejärel rea gif-faile, mis võitluse seisu näitavad.

Täiendavad reeglid

Kasutada tohib enda kirjutatud koodi nagu olümpiaadilgi. Mitme koodifaili kasutamine on lubatud, kui tulemust saab mõistlikult kompileerida. Muudest enda loodud (nt teksti) failidest andmete lugemine on lubatud. Teistest failidest lugemine ei ole lubatud.

Failidesse kirjutamine või muul viisil keskkonna muutmine ei ole lubatud.

Programmide esitamine

Saada oma programmi lähtekood targot@gmail.com. Siis ma jooksutan turniiri uuesti, uuendan turniiritabelit ja panen välja viimased logifailid.

Edetabel

Viimase etapi tulemused:

 AndresDaniilKalleOliverRaoTaavetTargo (näidis)ToomasTähvend1:1 kokku1:1 korrigeeritudKõik kõigi vastuTOTAL
AndresX1457201220102618185326891911287617426249771673641713
Daniil1153X64510561095196313251577180610620152221831333535
Kalle5321119X11259213498214491480679697411041120152
Oliver111119861901X1735124520941475291114458207231475335476
Rao1280293826072243X108423671308295816785240582131745375
Taavet23322145297626952674X29612423296921175303513871469065
Targo (näidis)12682844274322131795803X970291615552222912002842319
Toomas2295236929342353263518872944X300020417292643391263176
Tähvend31721161684509485282468244X610587501119319943

1:1 voorude summat korrigeeritakse nii, et kokkuvõttes oleks 1:1 ja kõik kõigi vastu voorud võrdse punktisummaga.

Hetkel juhib Taavet.

Auhinnad

Lehekülg viimati muudetud June 18, 2017, at 11:35 PM