Eesti drift meistrivõistlused (Pro2) · 2026
Drifti meistritiitli arvutaja
Reaalajas arvutus, kes viiest tiitlipretendendist superfinaalis meistriks tuleb ja millise tulemusega.
Eesmärk
Enne meistrivõistluste otsustavat superfinaali olid viis sõitjat punktidega väga lähestikku. Ametlik tulemusteenus näitab sõitude tulemusi, aga mitte seda, mida need tähendavad: kes võib veel meistriks tulla, mis tulemusega ja kuidas see teisi mõjutab. Seda pidi saama näha reaalajas, kõigil vaatajatel korraga.
Tulemus numbrites
Mis muutus
25
registreeritud sõitjat superfinaalides
5
tiitlipretendenti enne otsustavat vooru
32
kohaga väljalangemistabel
5 s
järel uuenesid tulemused kvalifikatsiooni ajal
Olukord
Eesti drifti meistrivõistluste punktiseis oli enne superfinaali väga tihe. Viis sõitjat võitlesid tiitli eest: 309,5, 297, 268, 264 ja 241,5 punkti. Liidri ja teise vahe, 12,5 punkti, oli peaaegu täpselt kvalifikatsiooni võidu väärtus. Üks hea või halb sõit võis kogu pildi ümber pöörata.
Ametlik tulemusteenus (DriftPoint) näitab kvalifikatsiooni ja paarissõitude tulemusi jooksvalt, aga ei ütle, mida need meistritiitli jaoks tähendavad. Kes saab praegu veel meistriks? Millise tulemusega? Ja mis juhtub, kui keegi teine ta enne välja lööb? Neid küsimusi arvutasid sõitjad ja pealtvaatajad varem peast ja tihti valesti.
Ehitasin selle kõrvale reaalajas arvutuse, mis vastab neile küsimustele iga sõidu järel, kõigil ekraanidel korraga. Keerulisem kui punktide liitmine oli see, et tulemusteenuse andmed ei ole alati valmis, ühesed ega õiged. Iga probleemi juures on kirjas ka see, mis esimese hooga ei töötanud.
Piirangud
- Punktireeglid (kvalifikatsioon, paarissõidud ja mitmeastmeline võrdsete punktide reegel) tuli siduda tulemusteenuse andmetega, mis meistrivõistluse seisu ise ei arvesta.
- Tulemus pidi uuenema kõigi vaatajate ekraanidel korraga, ilma et keegi peaks lehte värskendama.
- Tulemusteenust ei tohtinud koormata, ükskõik kui palju inimesi korraga vaatab.
- Kõik pidi töötama tavalisel veebiserveril, ilma andmebaasita.
- Ühtegi sõitjat ei saanud arvestada eraldi. Iga pretendendi võimalus sõltub sellest, mida teised neli samal ajal teevad.
Lahendus
Kuidas lahendasin
Reeglid
Kuidas muuta meistrivõistluste punktisüsteem arvutuseks, mis päriselt töötab?
Punktitabelid on kirjutatud otse 2026. aasta võistlusmääruse järgi. Kvalifikatsioonist saab 12, 10, 8, 6 ja nii edasi kuni 0,1 punktini. Paarissõitudest saab võitja 100, teine 88, kolmas 76, neljas 64, kaheksa parema hulka jõudnu 48, kuueteistkümne hulka jõudnu 32 ja esimeses ringis välja langenu 16 punkti.
Võrdsete punktide korral võrreldakse samm-sammult: kõigepealt etapivõite, siis teisi kohti ja nii edasi kuni 32. kohani. Kui ka see ei otsusta, loeb hooaja viimase etapi tulemus. Sama loogikat kasutab arvutus ka siis, kui on vaja teada, kas võrdsete punktidega lõpp annaks tiitli. Paberil on see lihtne tabel, aga iga stsenaarium peab selle läbi käima, nii et see peab olema kirjutatud täpselt nagu määruses, mitte „umbes nii”.
Kvalifikatsioon
Kvalifikatsiooni järjestus otsustab, kes kellega paarissõidus kohtub. See pidi olema õige juba enne, kui tulemusteenus selle avaldab.
Kvalifikatsiooni koht ei anna ainult punkte. See määrab ka paarid: esimene sõidab 32-ga, teine 31-ga ja nii edasi. Kui järjestus on vale, on valed ka kõik edasised stsenaariumid.
Määrus sorteerib üheksa sammuga: parim sõit, kahe sõidu summa, parima sõidu joon, nurk ja stiil, seejärel nõrgema sõidu joon, nurk ja stiil ning lõpuks väiksem võistlusnumber. Arvutus teeb seda sõitude toorhinnetest ise, iga uue sõidu järel, nii et järjestus on õige juba kvalifikatsiooni ajal.
Andmete sobitamine
Tulemusteenuses on sõitjad nimepidi ja nimed on kirjutatud veidi erinevalt (täpitähed, suured ja väikesed tähed, kirjavahemärgid).
Enne võrdlemist ühtlustatakse kõik nimed: täpitähed tehakse tavatähtedeks ja kirjavahemärgid eemaldatakse. Kui sõitjat nimekirjast ei leita, lisatakse ta automaatselt ja tema hooaja senised punktid võetakse samast teenusest. Nii ei alusta keegi nullist, kui tal on tegelikult juba punkte.
Siin oli ka lõks. Tulemusteenus lisab etapi punktid hooaja kokkuvõttesse alles pärast etapi lõppu. Kui hiljem leitud sõitja punktid oleks võetud etapi ajal ja siis veel kord pärast etappi, oleks sama etapp läinud arvesse kaks korda. Nüüd jäetakse käimasolev etapp hooaja punktidest välja, kuni see on lõppenud.
Vea parandus
Arvutus andis sõitjale, kes etapil üldse ei osalenud, 16 punkti esimese ringi eest.
Mis ei töötanud: simulatsiooni olekusse oli jäänud varasema arvutuse paarissõitude seis. Seal oli see sõitja 32 parema hulgas ja arvutus andis talle selle eest punktid, kuigi päris etapil teda polnud. Viga oli väike, aga just selline, mis võib tiitli valesti otsustada.
Kuidas see nüüd käib: punkte saavad ainult need, kes on etapile päriselt registreeritud. Paarid ehitatakse iga kord uuesti praeguse kvalifikatsiooni järgi, mitte ei võeta vanast olekust. Vana seis ei saa enam uude arvutusse lekkida.
Väljalangemistabel
Väljalangemistabelis võib tühi koht tähendada kahte väga erinevat asja: vastane pole veel selgunud või sellele kohale polegi kedagi.
Registreerunuid oli 25, tabelis on aga 32 kohta. Esimeses ringis saavad seega mõned sõitjad vastaseta edasi. Tühja kohta loetakse automaatseks edasipääsuks ainult esimeses ringis, kus see tõesti nii saab olla. Hilisemates ringides tähendab tühi koht, et vastase sõit on alles pooleli. Süsteem ei tohi seda kunagi edasipääsuks lugeda, muidu antaks kellelegi võit, mida ta pole veel välja teeninud.
Teine üllatus: tulemusteenus ei paiguta vastaseta kohti alati tavalise skeemi järgi (esimene 32-ga, teine 31-ga). Seepärast ei arva arvutus paare ise, vaid võtab tegeliku paari tulemusteenuse tabelist.
Stsenaariumid
Kuidas näidata mitte ainult hetkeseisu, vaid kõiki olukordi, kus iga viiest pretendendist saaks meistriks?
Iga pretendendi ja iga võimaliku lõpptulemuse kohta arvutab süsteem, kui kaugele võivad teised neli jõuda, et see olukord ikka kehtiks. Sellest tehakse lihtne lause, näiteks „tuleb meistriks 3. kohaga, KUI konkurent A ei jõua kõrgemale kui 2. kohale JA konkurent B langeb varem välja”.
Nimekiri muutub võistluse käigus lühemaks. Kui konkurent on juba kaheksa parema hulgas, kaovad kohe kõik stsenaariumid, mis eeldasid, et ta langeb varem välja. Vaataja näeb alati ainult neid võimalusi, mis on veel päriselt lahtised.
Kõrvaltegijad
Superfinaali võib võita ka keegi väljastpoolt viisikut. Ka see muudab tiitli arvestust.
Ülejäänud 20 sõitjat ei saa küll meistriks, aga nad võtavad pretendentidelt kohti ja punkte. Eraldi plokk näitab, mis juhtub, kui superfinaali või poodiumi võidab keegi neist: kes pretendentidest sellest võidab ja kes kaotab. Tihti oli see kõige huvitavam osa, sest „kõrvaltegija” võit võis tiitli otsustada rohkem kui pretendentide omavaheline sõit.
Reaalajas uuendus
Kümned inimesed vaatavad sama tulemust korraga. Kuidas hoida kõik ekraanid samas seisus ilma serverit ja tulemusteenust üle koormamata?
Kõik vaatajad saavad uuendused ühest jagatud olekufailist reaalajas voona. Tulemusteenuselt küsitakse andmeid ainult üks kord ajaaknas, ükskõik kui palju inimesi parajasti vaatab: olekufailis on viimase päringu aeg ja iga vaataja näeb seda.
Küsimise sagedus sõltub võistluse käigust. Enne algust ja pärast lõppu kord minutis. Kvalifikatsiooni ajal iga 5 sekundi järel, sama tihti kui tulemusteenuse enda ülekandegraafika. Paarissõitude ajal iga 15 sekundi järel, sest paar sõidab mitu minutit.
Mis ei töötanud: arendusserver teenindab ühte päringut korraga. Avatud reaalajas voog hoidis selle kinni ja kõik muu jäi ootama. Nüüd saadab server kohe algseisu ja sulgeb ühenduse ning brauser ühendub ise uuesti. Vaatajale paistab see ikka reaalajas vooguna.
Kontroll
Mis saab siis, kui tulemusteenus avaldab vale tulemuse?
Seda juhtub: kohtunikud parandavad hindeid ja vahepeal on ekraanil vale seis. Korraldaja saab automaatse uuendamise ühe klikiga peatada ja seisu ise parandada. Kui uuendamine on peatatud, ei kirjuta ükski uus päring käsitsi tehtud parandust üle. Ekraanidele jõuab ainult kontrollitud tulemus.
Korraldaja muudatused ei lähe ka kohe kõigile. Käsitsi parandus või paarissõidu võitja valik jääb kõigepealt korraldaja enda ekraanile testrežiimi, kus ta näeb, mida see punktiseisu ja stsenaariumitega teeb. Alles nupp „Edasta kõigile” saadab selle seisu kõigi vaatajate ekraanile. Nii ei näe pealtvaatajad kunagi poolikut või valesti klikitud seisu.
Tulemus
Superfinaalide ajal nägid sõitjad, meeskonnad ja pealtvaatajad reaalajas, milline tulemus iga hetk meistritiitli tagab ja kelle tulemus kelle võimalusi mõjutab. Keegi ei pidanud punktitabelit peast arvutama. Korraldajal oli kogu aeg kontroll: iga ekraanil olnud seis oli kinnitatud ja õige.
Kogu süsteem on paar PHP faili ja üks olekufail. Andmebaasi, eraldi serverit ega tasulisi teenuseid pole vaja.
Edasi
Loogiline järgmine samm on kasutada sama arvutust ka teiste klasside ja etappide jaoks, mitte ainult superfinaalides.