MD
Julkinen

#5 Miten tulosraportti muodostetaan


arkkitehtuuri

Tässä kirjoituksessa käyn läpi, miten iltarastiohjelma muodostaa leimaustiedoista valmiin tulosraportin rastiväliaikoineen ja sijoituksineen. Kuvaan algoritmit yleistasolla ilman koodin yksityiskohtia.

Tietomalli

Kilpailun syöte koostuu kolmesta pääosasta:

  • Radat — järjestetty lista rastikoodeja. Sama fyysinen rasti voi esiintyä listassa useammin kuin kerran (hajontalenkki).
  • Kilpailijat — nimi, seura, emit-numero.
  • Suoritukset — kukin suoritus viittaa yhteen rataan ja yhteen kilpailijaan ja sisältää listan leimauksia. Jokainen leimaus on pelkkä pari (ajanhetki, rastikoodi).

Leimaustaulukossa ei ole valmiina tietoa siitä, mitä radan rastia mikäkin leimaus vastaa. Tämän sovittaminen on järjestelmän keskeinen tehtävä.

Leimausten sovittaminen rastijärjestykseen

Sovitusongelma ratkaistaan liukuvan ikkunan algoritmilla. Algoritmi käy läpi kaikki mahdolliset leimaukset alkupisteenä ja etsii niistä eteenpäin sellaisen osajoukon, joka vastaa haluttua rastisarjaa järjestyksessä — ylimääräiset leimaukset (väärät rastit, turhat leimaukset) ohitetaan.

Tuloksena on lista evaluaatioita: kutakin kelvollista osumaa kohden tallennetaan käytettyjen leimausten indeksit ja niistä laskettu aika.

Algoritmi palauttaa kaikki löytyneet kelvolliset polut — tyypillisesti yhden, mutta hajonnallisilla radoilla mahdollisesti useamman.

Superrastiväli

Pelkkien peräkkäisten rastivälien (A→B, B→C, C→D) sijaan järjestelmä laskee evaluaatiot myös kaikille osaväleille: A→C, A→D, B→D jne. Näitä kutsutaan superrastiväleiksi.

Tämä mahdollistaa kumulatiivisten aikojen laskemisen suoraan: esimerkiksi aika lähdöstä rastille D saadaan suoraan superrastivälin evaluaatiosta eikä tarvitse laskea peräkkäisiä väliaikoja yhteen. Kumulatiivinen aika on saatavilla myös silloin, kun joltain väliltä puuttuu evaluaatio — kunhan lähdöstä kyseiselle rastille löytyy yhtenäinen polku.

Hajontalenkit

Hajontalenkeillä kilpailija käy samalla rastilla kahdesti eri puolilta. Leimaustaulukossa sama rastikoodi esiintyy siis kahdesti.

Liukuvan ikkunan algoritmi löytää tällöin useamman kelvollisen polun — yksi kullekin kierrosjärjestykselle. Lisäksi eri rastivälien evaluaatiot voivat jakaa saman leimauksen, mikä olisi laskennallisesti epäkelpo.

Tämä ratkaistaan kahdessa vaiheessa:

  1. Päällekkäisyystarkistus poistaa evaluaatiot, joissa kaksi eri välin evaluaatiota käyttäisi samaa leimausindeksiä.
  2. Paras polku valitaan leveyshakuna niiden evaluaatioiden joukosta, jotka yhdessä muodostavat kattavan, ei-päällekkäisen polun koko radalle. Tasatilanteessa valitaan leksikografisesti ensimmäinen.

Tulospipeline

Kun kaikkien suoritusten evaluaatiot on laskettu, tulosraportti muodostetaan neljässä vaiheessa:

1. Suoritusten luokittelu. Suoritukset jaetaan kelvollisiin (koko radan suorittaneet tai manuaalisesti hyväksytyt) ja epäkelvollisiin (DNF, DSQ, DNS). Jälkimmäiset eivät osallistu loppusijoitukseen mutta näkyvät taulukossa omilla rastiväliaikoineen.

2. Rastivälievaluaatioiden kokoaminen. Kullekin suoritukselle kerätään yhteen kaikki löytyneet rastivälievaluaatiot.

3. Parhaan polun valinta. Hajontalenkkimonitulkintaisuus ratkaistaan: kullekin suoritukselle valitaan yksi ei-päällekkäinen evaluaatiokombinaatio, joka kattaa mahdollisimman monta rastiväliä. Tulos on yksinkertainen hakemisto: rastiväli → evaluaatio.

4. Raportin koostaminen. Suoritukset järjestetään loppuajan mukaan. Jokaiselle rastille ja rastivälille lasketaan sijoitusluvut vertaamalla kaikkien kilpailijoiden aikoja kyseisellä kohdalla. Kilpailijan sukupuoli päätellään etunimestä tunnettua etunimilistaa vasten. Ajat muotoillaan näytettävään muotoon.

Vajaat suoritukset

Jos kilpailija ohittaa rastin, kyseiseltä rastiväliltä ei synny evaluaatiota eikä väliaikaa voida laskea. Kumulatiivinen aika näytetään silti siellä, missä se on luotettavasti tunnettavissa.

Ensisijainen lähde on seuraavan rastivälin evaluaatio: koska seuraavan välin data tietää, millä hetkellä kilpailija leimasi sen välin alkurastin, tuo aika on myös puuttuvan välin päätepiste.

Toissijaisesti, jos seuraavankaan välin evaluaatiota ei ole, aika etsitään leimaustaulukosta suoraan koodilla. Tämä on epävarma menetelmä etenkin hajontaradoilla, joten tulos esitetään kursiivilla varauksella varustettuna eikä se osallistu sijoituslaskentaan.