Autorské riešenie
[stiahni py]

  • Počet riešiteľov: 12 / 12 = 100  %

  • Úspešnosť riešenia:  6.92 / 7 = 99 %

Na vstupe tejto úlohy máme hľadisko reprezentované pomocou zoznaum zoznamov výšok ľudí v jednotlivých radoch. Na výstupe by sme chceli získať opäť zoznam zoznamov rovnakej dimenzie, v ktorom si uchováme informáciu o tom, ktorí ľudia majú nárok na zľavu z dôvodu, že v niektorom rade pred nimi sedí vyšší návštevník.

Riešenie tejto úlohy môže byť založené na postupnom prechode stĺpcov tohto zoznamu zoznamov. Zapíšeme si pozíciu stĺpca, ktorý ideme vyhodnotiť. Následne pomocou for cyklu prejdeme všetky sedadlá v nasledujúcich radoch a otestujeme, či výška diváka v ďalšom rade je menšia ako výška doposiaľ najvyššieho diváka v tomto stĺpci. Na obrázku nižšie je znázornený príklad, v ktorom je výsledkom porovnania zľava pre diváka, lebo výška s hodnotou 1 je menšia ako výška s hodnotou 2.

Príklad porovnania 

Ak zistíme, že výška diváka nie je menšia ako doposiaľ najvyššieho diváka v danom stĺpci, zapíšeme si novú pozíciu do premennej nazvanej napríklad porovnavana_pozicia.

Nasleduje možný zdrojový kód v jazyku Python:

def urci_zlavy(hladisko):
    """
    :param hladisko: zoznam vysok v celom hladisku.
    :type: list[list]
    :return: zoznam zliav v celom hladisku.
    :rtype: list[list]
    """
    zlava = [[False for _ in range(len(hladisko[0]))] for _ in range(len(hladisko))]
    for sedadlo in range(len(hladisko[0])):
        # v nultom rade nebude žiadna zľava
        zlava[0][sedadlo] = False
        # zapíšeme si pozíciu stĺpca, ktorý ideme vyhodnotiť
        porovnavana_pozicia = hladisko[0][sedadlo]
        for i in range(1, len(hladisko)):
            if hladisko[i][sedadlo] < porovnavana_pozicia:
                zlava[i][sedadlo] = True
            else:
                # divák je vyšší ako doposiaľ najvyšší v predchadzajúcich radoch, 
                # teda si ho zapamätáme
                porovnavana_pozicia = hladisko[i][sedadlo]
                # a nedáme mu zľavu
                zlava[i][sedadlo] = False
    return zlava

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

Úlohu riešilo 12 tímov v kategórii expert aj guru. Väčšina tímov použila správny postup na dosiahnutie vhodného riešenia a využilo aj postup uvedený v autorskom riešení. Viaceré riešenia boli výborne okomentované. Vo všetkých riešeniach tímy správne určili parametre funkcie.