Autorské riešenie
[stiahni py]                                      

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

  • Úspešnosť riešenia: 4 / 5 = 80 %

Cieľom úlohy je vykresliť obláčik podľa nasledovných pravidiel:

  • obláčik pozostáva z kruhov, počet kruhov je zadaný v parametri funkcie,
  • veľkosť kruhov je generovaná náhodne, pričom vieme, že minimálny polomer kruhu je 10 a maximálny polomer je zadaný v parametri funkcie,
  • rozostup medzi kruhmi je generovaný náhodne, pričom sa 2 kruhy čiastočne, ale nie úplne, prekrývajú,
  • kruhy majú 2 rôzne farby, ktoré sa striedajú.

obláčik

V tele funkcie stačí použiť 1 cyklus s pevným počtom opakovaní. Počet opakovaní určuje počet kruhov v obláčiku. V každom opakovaní cyklu potrebujeme vo vhodnom rozsahu náhodne vygenerovať polomer kruhu a rozostup medzi 2 kruhmi. Pre náhodné generovanie čísiel môžeme použiť funkciu b>random.randint() alebo random.uniform(). Kruhu nastavíme farbu a vykreslíme ho.

Keďže s určitosťou vieme, že minimálny polomer kruhu má byť 10 a maximálny je zadaný v parametri funkcie (napr. max_polomer), môžeme to zapísať ako random.randint(10, max_polomer).

Máme vypočítaný polomer nového kruhu, ktorý chceme vykresliť. Teraz potrebujeme vypočítať vzdialenosť, o ktorú sa musí korytnačka posunúť tak, aby sa nový kruh s predošlým čiastočne prekrývali. Rozsah pre náhodné generovanie rozostupu vieme určiť nasledovne. Minimálnou hodnotou bude rozdiel medzi polomerom starého a nového kruhu v absolútnej hodnote. K tomu ešte pripočítame 1 pre prípad, keby boli polomery rovnaké (aby sa kruhy úplne neprekrývali). Maximálnou hodnotou bude súčet polomerov starého a nového kruhu. Od toho ešte odpočítame 1 preto, aby sa kruhy nedotýkali, ale prekrývali. Zápis bude vyzerať takto: random.randint(abs(stary_polomer-novy_polomer)+1, stary_polomer+novy_polomer-1).

kružnice

Ostalo nám už len vyriešiť striedanie 2 rôznych farieb kruhov. Ako pomocné počítadlo môžeme využiť premennú i z cyklu. Za pomoci operácie % zistíme, či je poradie vykresľovaného obláčika párne alebo nepárne. Ak je párne, vykreslí sa obláčik vo farbe1 (napr. modrá), ak je nepárne, vykreslí sa obláčik vo farbe2 (napr. sivá). 

Riešenie úlohy v jazyku Python môže vyzerať nasledovne:

#Python
def kresli_oblacik(pocet, max_polomer):
    stary_polomer = 10
    for i in range(pocet):
        novy_polomer = random.randint(10, max_polomer)
        posun = random.randint(abs(stary_polomer-novy_polomer)+1, 
                               stary_polomer+novy_polomer-1)
        pero.forward(posun)
        if i % 2 == 0:
            pero.dot(novy_polomer * 2, 'skyblue')
        else:
            pero.dot(novy_polomer * 2, 'lightgrey')
        stary_polomer = novy_polomer

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

Plný počet bodov za riešenie tejto úlohy získalo 11 tímov. V súťažných riešeniach sa kruhy vykresľovali nie len pomocou funkcie turtle.dot(), ale aj pomocou funkcie turtle.circle() či canvas.create_oval(). Častou chybou bola mylná predstava o vstupných parametroch týchto funkcií. Zatiaľ čo pre funkciu circle() je vstupným parametrom polomer kruhu, pre funkciu dot() to je priemer kruhu.

Najčastejšou chybou bolo určenie nesprávneho rozsahu čísel pre generovanie náhodného rozostupu medzi 2 susednými kruhmi. Niektoré kruhy sa preto buď úplne prekrývali, alebo vôbec neprekrývali.

Medzi zaujímavé riešenia patrilo aj náhodné generovanie 2 rôznych farieb kruhov, vďaka čomu sa pri každom spustení programu vykreslil zaujímavý, pestrofarebný obláčik :)