Autorské riešenie
[stiahni moderne_umenie.py]                                       

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

  • Úspešnosť riešenia: 4.67 / 6 = 78 %                   

Autor v popise uviedol postupnosť ťahov, ktoré robil pri vytváraní obrazu. Ak si chceme obraz vytvoriť sami, musíme postupovať presne podľa jeho ťahov. Okrem vytvorenia repliky obrazu, budeme potrebovať aj rám, ktorý si vieme doma ľahko vyrobiť. Každý rám musí sedieť presne na daný obraz. Nemôže byť ani zbytočne veľký, pretože by z neho obraz vypadával a nemôže byť ani príliš malý, aby nezakrýval kresbu, musí byť čo najmenší možný. Každá kresba by mal mať odstup od rámu 10 dĺžkových jednotiek z každej strany, aby sa nám nestalo, že obraz zarámujeme aj cez kresbu. Odstup od rámu si môžete predstaviť tak, ako je znázornené na obrázku nižšie:

odstup od rámu

Vedľa obrazu bol uvedený popis: HHHDPPPLDLPPHDPLHDDDLPDPHDPLHHHPHHLDDD

H znamená hore, D znamená dole, P znamená vpravo a L znamená vľavo. Každý takýto posun je o 50 dĺžkových jednotiek. Musíme vytvoriť funkciu, ktorá jednotlivé ťahy bude prechádzať jeden po druhom. Môžeme na to využiť for cyklus, ktorý rozpozná jednotlivé písmená a podľa toho sa rozhodne, či aktuálnu polohu na y či x osi zväčší alebo zmenší. Kód by mohol vyzerať takto:

#Python
for tah in tahy:
    if tah == "H":
        aktualne_y+= 50
    elif tah == "D":
        aktualne_y-= 50
    elif tah == "P":
        aktualne_x += 50
    elif tah == "L":
        aktualne_x -= 50

Pre vypočítanie správnej výšky a šírky obrazu musíme zistiť ako nízko po y osi sme išli (minimalne_y), ako vysoko po y osi sme sa pri kreslení dostali (maximalne_y) a rovnako to platí aj pre ľavú a pravú stranu. Teda ak ideme smerom dole, vždy hľadáme minimum z aktuálnej pozície na aktualne_y a uloženého minima na y osi (minimalne_y). Rovnako to platí pre všetky smery. Pôvodný kód doplníme:

#Python
def rozmery_ramu(tahy):
    maximalne_y, minimalne_x, minimalne_y, maximalne_x = 0, 0, 0, 0
    aktualne_x, aktualne_y= 0, 0
    for tah in tahy:
        if tah == "H":
            aktualne_y += 50
            maximalne_y = max(maximalne_y, aktualne_y)
        elif tah == "D":
            aktualne_y -= 50
            minimalne_y = min(minimalne_y, aktualne_y)
        elif tah == "P":
            aktualne_x += 50
            maximalne_x = max(maximalne_x, aktualne_x)
        elif tah == "L":
            aktualne_x -= 50
            minimalne_x = min(minimalne_x, aktualne_x)  

Keď sme už našli minimum a maximum na y a x osi, môžeme zistiť výslednú šírku a výšku potrebného rámu. Musíme myslieť na to, že orbaz môžeme nakresliť od stredu len smerom dole, čiže do záporných hodnôt. Preto musíme zvážiť, ktorú výslednú hodnotu budeme odpočítavať od ktorej: minimalne_x/minimalne_y môže byť záporné, preto ho odpočítame od maximalne_x/maximalne_y. +20 znamená že vytvárame rozostup medzi obrazom a rámom (10 sprava/zhora, 10 zľava/zdola).

#Python
vysledna_sirka = (maximalne_x - minimalne_x) + 20
vysledna_vyska = (maximalne_y - minimalne_y) + 20
return vysledna_sirka, vysledna_vyska
  

Výsledné riešenie môže vyzerať takto:

#Python
def rozmery_ramu(tahy):
    maximalne_y, minimalne_x, minimalne_y, maximalne_x = 0, 0, 0, 0
    aktualne_x, aktualne_y = 0, 0
    for tah in tahy:
        if tah == "H":
            aktualne_y+= 50
            maximalne_y = max(maximalne_y, aktualne_y)
        elif tah == "D":
            aktualne_y-= 50
            minimalne_y = min(minimalne_y, aktualne_y)
        elif tah == "P":
            aktualne_x += 50
            maximalne_x = max(maximalne_x, aktualne_x)
        elif tah == "L":
            aktualne_x-= 50
            minimalne_x = min(minimalne_x, aktualne_x)
    vysledna_sirka = (maximalne_x - minimalne_x) + 20
    vysledna_vyska = (maximalne_y - minimalne_y) + 20
    return vysledna_sirka, vysledna_vyska

tahy = "HHHDPPPLDLPPHDPLHDDDLPDPHDPLHHHPHHLDDD"
sirka,vyska= rozmery_ramu(tahy)
print("Potrebny rozmer ramu je", str(sirka) + 'x' + str(vyska))  

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

Skupina, ktorá získala plný počet bodov bola McNuggets, pirohy, zemaky. Všetkým trom tímom gratulujeme.

Najčastejšie chyby:
1. Žiaci zabúdali na to, že pri každom ďalšom ťahu musia hľadať nové maximum alebo minimum.
2. U veľa riešení chýbal odstup od obrazu šírky 10 z každej strany.
3.Úlohu niektorí riešili aj graficky pre konkorétny príklad zo zadania, čo nebolo vôbec zadané.