Autorské riešenie
[stiahni]

Pri riešení tejto úlohy nám veľmi pomôže, ak si nakreslíme pomocný obrázok. Na tomto obrázku si vyznačíme cestu, po ktorej sa budeme pohybovať pri vykresľovaní bublín. Vidíme, že z každej väčšej bubliny vyrastajú 2 až 4 menšie bubliny. Najprv sa posunieme dopredu a nakreslíme bublinu s rovnakým priemerom ako je dĺžka posunutia. Potom na tej bubline nakreslíme niekoľko (podľa náhody 2 až 4) bublín s polovičným priemerom. Pred ich vykresľovaním sa najprv natočíme vľavo o určitý uhol. Potom opakovane budeme vykresľovať bubliny a otáčať sa o nejaký uhol doprava. Napokon sa vrátime na začiatok, kde sme začali kresliť.

Jednotlivé časti obrázku sa podobajú na celý obrázok. Pri kreslení takýchto samopodobných obrázkov je veľmi vhodné použiť rekurziu. Riešenie tejto úlohy zapíšeme do rekurzívnej procedúry bublinuj s parametrom "úroveň určujúcim počet úrovní bublín. Aby sme nevykresľovali bubliny do nekonečna, ale len do požadovanej úrovne, použijeme v tele procedúry príkaz vetvenia ak, Pri vykresľovaní každej väčšej bubliny bude počet menších bublín rôzny. Aby sme sa vedeli vrátiť a začiatok kreslenia väčšej bubliny po vykreslení menších bublín níáhodného počtu, musíme si zapamätať v lokálnej premennej "početBublín vygenerovaný počet bublín. ktorý budeme náhodne generovať. Podstatná časť procedúry zabezpečí posun dopredu, vykreslenie bubliny, opakované rekurzívne vykresľovanie menších bublín s otáčaním sa, návrat na miesto, kde sme boli na začiatku pred vykreslením bubliny. Pre návat na začiatok kreslenia je dôležité, aby posun dopredu pred rekurzívnym volaním a posun vzad po volaní sa navzájom vynulovali. Rovnako je to s uhlami - o koľko sa natočím vpravo z pôvodného smeru o toľko sa musím natočiť vľavo. Procedúra bublinuj môže vyzerať nasledovne:

viem bublinuj :veľkosť :úroveň
  ak :úroveň > 0 [
    urobTu "početBublín 2 + náhodne 3
    urobTu "uhol 60 * ((:početBublín-1) / 2)

    dopredu :veľkosť
    obrysKruhu :veľkosť

    vľavo :uhol
    opakuj :početBublín [
      bublinuj :veľkosť / 2 :úroveň - 1
      vpravo 60
    ]
    vľavo 60 + :uhol

    vzad :veľkosť
  ]
koniec

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

Úlohu riešilo 14 tímov, z toho 5 tímov malo plný počet bodov. Pri tejto úlohe sa vyžadovalo použitie rekurzie, ktorú niektorí súťažiaci nepoznali. Správne riešenia boli rôznorodé - s rekurzívnou podmienkou na začiatku a v jednom prípade aj v strede, s roznymi vypoctami uhlov, s jednou, ci viacerými procedúrami. Niektorí stihli v časovom limite poslať len čiastočne správne riešenie úlohy. V jednom nekompletnom riešení sa objavilo použitie viacerých korytnačiek. V niektorých riešeniach sa objavili zoznamy.