Autorské riešenie
[stiahni py]

  • Počet riešiteľov: 22 / 29 = 76 %

  • Úspešnosť riešenia: 5,57 / 8 = 70%

Cieľom úlohy bolo vytvoriť zjednodušenú verziu detektora objektov typu YOLO, ktorá pre každé okienko v mriežke rozhodne:

  • či sa v ňom nachádza aspoň časť auta,
  • či je v ňom stred auta,
  • a aký veľký kus auta zaberá v tomto okienku (relatívna šírka a výška).

1. Rozdelenie obrázka na mriežku
Najprv sme zistili veľkosť jedného okienka. Keďže obrázok má rozmery obrazok_sirka × obrazok_vyska a mriežka je n × n, šírka a výška jedného okienka sú jednoducho:

  • okienko_sirka = obrazok_sirka / n
  • okienko_vyska = obrazok_vyska / n

2. Určenie súradníc auta
Auto je znázornené obdĺžnikom so stredom v bode (auto_x, auto_y) a rozmermi auto_sirka × auto_vyska. Preto sme si vypočítali jeho krajnice:

  • ľavý horný roh (auto_x1, auto_y1)
  • pravý dolný roh (auto_x2, auto_y2)

3. Prechádzanie cez všetky okienka
Program prechádza postupne každé okienko v mriežke a zisťuje:

  • je_auto: či sa obdĺžnik (auto) aspoň trochu prekrýva s daným okienkom,
  • je_stred: či stred auta patrí do tohto okienka,
  • relatívna_sirka a relatívna_vyska: ak sa auto nachádza v okienku, spočítame, aká časť okienka je pokrytá autom. Na to sa použil prienik (prekrytie) auta s daným okienkom.

4. Výstup
Pre každé okienko sa uloží zoznam štyroch hodnôt:

[je_auto, je_stred, relativna_sirka, relativna_vyska]

Celkový výsledok je teda dvojrozmerný zoznam (mriežka hodnôt).

Aby bolo riešenie názorne ukázané, vytvorili sme aj pomocnú funkciu zobraz_vysledky, ktorá výsledky pekne vypíše pre každé okienko.

Vaše zaujímavé riešenia a najčastejšie chyby

Nakoľko bolo potrebné program aj testovať, riešitelia mali myslieť na možnosť zadávania testovacích dát. Niektorí to urobili vopred definovanými testovacími hodnotami, ktoré si funkcia na zobrazenie výstupu sama načítala z programu. Zaujímavým riešením bolo postupné interaktívne zadávanie testovacích hodnôt z klávesnice priamo používateľom pri spustení programu, ktoré sa potom predali ako parametre do funkcie na spracovanie.
Najčastejšou chybou bola chýbajúca dokumentácia kódu. Problémom boli aj situácie, pri ktorých sa auto len dotýkalo políčka, ale nezasahovalo doňho (relatívna šírka aj výška bola 0%), čo niekedy riešitelia nesprávne akceptovali, že auto je na políčku. U niektorých riešiteľov vyšli aj záporné relatívne hodnoty (jlavne pri okrajových políčkach, ktoré zrejme neboli dostatočne testované). V niektorých prípadoch bolo aj podozrenie z riešenia vygenerovaného pomocou ChatGPT, ktoré ale neprešlo ani riadnym testovaním a tak riešitelia neodhalili jeho chyby.