# autorske riešenie

def vypocitaj_detekcie(
    obrazok_sirka: int,
    obrazok_vyska: int,
    auto_x: int,
    auto_y: int,
    auto_sirka: int,
    auto_vyska: int,
    mriezka_rozmer: int
) -> list:
    """
    Vypočíta detekcie auta v jednotlivých okienkach YOLO mriežky.
    Vráti dvojrozmerný zoznam s hodnotami:
    [je_auto: bool, je_stred: bool, relatívna_sirka: float, relatívna_vyska: float]
    """
    okienko_sirka = obrazok_sirka / mriezka_rozmer
    okienko_vyska = obrazok_vyska / mriezka_rozmer
    
    auto_x1 = auto_x - auto_sirka / 2
    auto_y1 = auto_y - auto_vyska / 2
    auto_x2 = auto_x + auto_sirka / 2
    auto_y2 = auto_y + auto_vyska / 2
    
    vysledky = []
    
    for y in range(mriezka_rozmer):
        riadok = []
        for x in range(mriezka_rozmer):
            okienko_x1 = x * okienko_sirka
            okienko_y1 = y * okienko_vyska
            okienko_x2 = (x + 1) * okienko_sirka
            okienko_y2 = (y + 1) * okienko_vyska
            
            je_auto: bool = (auto_x1 < okienko_x2 and auto_x2 > okienko_x1 and
                             auto_y1 < okienko_y2 and auto_y2 > okienko_y1)
            
            je_stred: bool = (okienko_x1 <= auto_x < okienko_x2 and
                              okienko_y1 <= auto_y < okienko_y2)
            
            relativna_sirka: float = 0.0
            relativna_vyska: float = 0.0
            if je_auto:
                prienik_x1 = max(auto_x1, okienko_x1)
                prienik_y1 = max(auto_y1, okienko_y1)
                prienik_x2 = min(auto_x2, okienko_x2)
                prienik_y2 = min(auto_y2, okienko_y2)
                
                relativna_sirka = (prienik_x2 - prienik_x1) / okienko_sirka
                relativna_vyska = (prienik_y2 - prienik_y1) / okienko_vyska
            
            riadok.append([je_auto, je_stred, relativna_sirka, relativna_vyska])
        vysledky.append(riadok)
    
    return vysledky


def zobraz_vysledky(vysledky: list, mriezka_rozmer: int) -> None:
    """
    Vypíše výsledky pre každé okienko
    """
    print(f"Výsledky detekcie pre mriežku {mriezka_rozmer}x{mriezka_rozmer}:")
    for y in range(mriezka_rozmer):
        for x in range(mriezka_rozmer):
            je_auto, je_stred, rel_sirka, rel_vyska = vysledky[y][x]
            print(f"Okienko [{y}][{x}]:")
            print(f"  Je_auto: {je_auto}")
            print(f"  Je_stred: {je_stred}")
            print(f"  Relatívna šírka: {rel_sirka:.2f}")
            print(f"  Relatívna výška: {rel_vyska:.2f}")


# Skúšobné dáta
obrazok_sirka = 300
obrazok_vyska = 300
auto_x = 150
auto_y = 125
auto_sirka = 100
auto_vyska = 60
mriezka_rozmer = 3

vysledky = vypocitaj_detekcie(
    obrazok_sirka, obrazok_vyska,
    auto_x, auto_y,
    auto_sirka, auto_vyska,
    mriezka_rozmer
)

zobraz_vysledky(vysledky, mriezka_rozmer)
