Autorské riešenie
[stiahni mikulas.py]

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

  • Úspešnosť riešenia: 3,35 / 4 = 83,65%

Úlohou je nakresliť mikulášsku čiapku, ktorá pozostáva z bielych a červených rovnostranných trojuholníkov. Čiapka je daná dvoma parametrami: dĺžkou spodného lemu čiapky a počtom trojuholníkov v ňom. Taktiež vieme, že je veľkosť brmbolca rovnaká ako veľkosť trojuholníkov v leme čiapky.

mikulasska ciapka

Keďže sa rovnostranný trojuholník opakuje v riešení viackrát, môžeme si na jeho vykreslenie vytvoriť samostatnú funkciu, aby sme sa vyhli duplicite kódu, mali riešenie prehľadnejšie a ľahšie upraviteľné. Majme parameter a, ktorý určuje dĺžku strany trojuholníka, a parameter farba, ktorý umožní použiť tú istú funkciu pre červené aj biele časti čiapky.

Pre nastavenie farby výplne použijeme príkaz fillcolor(farba). Kreslenie vyplneného tvaru začneme príkazom begin_fill() a ukončíme príkazom end_fill(). Korytnačka urobí v cykle trikrát krok vpred a otočenie o 120°. (Vnútorný uhol v rovnostrannom trojuholníku je 180 / 3 = 60° a uhol otočenia je 180 - 60 = 120°). Po dokreslení trojuholníka je korytnačka v rovnakom bode a smere natočenia ako na začiatku jeho kreslenia.

def trojuholnik(a, farba):
    turtle.fillcolor(farba)
    turtle.begin_fill()
    for _ in range(3):
        turtle.forward(a)
        turtle.left(120)
    turtle.end_fill()

Teraz sa môžeme pustiť do samotnej funkcie na vykreslenie čiapky. Aby sme čiapku kreslili bez obrysov, zdvihneme pero príkazom penup(). Vykreslíme veľký červený trojuholník, ktorého veľkosť strany je daná parametrom dlzka na vstupe.

V ďalšom kroku vykreslíme biely lem čiapky. Veľkosť strany bieleho trojuholníka v leme si odvodíme z dĺžky lemu a počtu trojuholníkov v ňom, teda dlzka/pocet. Vykreslenie trojuholníka opakujeme v cykle pocet-krát.

Nachádzame sa na konci spodného lemu. Po obvode čiapky sa presunieme na jej špic a vykreslíme posledný biely trojuholník, ktorý reprezentuje brmbolec.

def kresli_ciapku(dlzka, pocet):
    turtle.penup()
    turtle.backward(dlzka / 2)

    trojuholnik(dlzka, "red")

    a = dlzka / pocet
    for _ in range(pocet):
        trojuholnik(a, "white")
        turtle.forward(a)

    turtle.left(120)
    turtle.forward(dlzka)
    turtle.right(60)

    trojuholnik(a, "white")

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

Medzi najčastejšie chyby pri riešení tejto úlohy patrilo vytvorenie funkcie bez vstupných parametrov a kreslenie čiapky pomocou pevne zadaných hodnôt, čo znemožňuje jednoduchú zmenu veľkosti alebo počtu vzorov.

Ďalšou chybou bolo nesprávne použitie príkazov begin_fill() a end_fill() - niektoré tímy vložili medzi tieto príkazy celé kreslenie spodného lemu, hoci správne má byť medzi nimi vždy len jeden uzavretý útvar, napríklad jeden rovnostranný trojuholník. Pri nesprávnom použití príkazov ostane kreslený tvar nevyplnený.

Niektoré tímy zabudli vyplniť brmbolec bielou farbou, keď kreslili čiapku na bielom pozadí.