Autorské riešenie
[stiahni imp : py]                                       

  • Počet riešiteľov: 10 / 11 = 90 %                       

  • Úspešnosť riešenia: 3,82 / 5 = 76%                   

Pri algoritmickom riešení budeme postupovať podobne ako pri skutočnom tkaní koberca: začneme od stredu a postupne budeme pokračovať až do potrebnej veľkosti koberca. Pre vytvorenie pohybu korytnačky si predstavíme pohyb obvode točitého schodiska, teda budeme opakovať malý krok s otočením o malý uhol stále do tej istej strany (napríklad vždy o 5 stupňov vpravo). Čím menší uhol zvolíme, tým bude špirála jemnejšia a plynulejšia. Ak by sme kroky robili stále rovnako malé, pohybovali by sme sa stále dookola, preto ak chceme dosiahnuť postupne sa odvíjajúcu špirálu, musíme aj kroky postupne zväčšovať vždy o rovnaký malý prírastok (napríklad o 0.02 kroku). Začneme teda v strede nulovým krokom a opakujeme pohyb dovtedy, pokiaľ posledný krok už nebude presahovať stanovenú maximálnu dĺžku.

ako kresliť špirálu

Najprv si teda nastavíme najväčšiu dovolenú dĺžku a hrúbku priadze (= hrúbku pera) a nastavíme počiatočný krok na nulu. Ďalej už len opakujeme postupné zväčšenie kroku, výber náhodnej farby zo vstupného zoznamu farieb, pohyb vpred o daný krok a otočenie o daný malý uhol. Aby sme splnili podmienky správneho tkania (podľa zadania úlohy), musíme vyladiť hodnoty uhla otočenia, hrúbky a dĺžky čiary.

správny koberec

;Imagine logo
viem procedura tkanie :farby
  urobTu "dlzka 12
  urobTu "hrubka 15
  nechHp :hrubka
  urobTu "krok 0
  kym [:krok < :dlzka] [urobTu "krok :krok+0.02 nechFp ?prvok :farby do :krok vp 5]
koniec

 

Python
import turtle
import random
def tkanie(farby:list):
    ''' Vykreslí koberec zo zadanej farebnej sady priadzí. :param farby: farebná sada priadzí, t.j. zoznam aspoň 2 farebných priadzí :type farby: list ''' dlzka=12 hrubka=15 pero=turtle.Turtle() pero.pensize(hrubka) krok=0 while krok<dlzka: krok=krok+0.02 pero.pencolor(random.choice(farby)) pero.forward(krok) pero.right(5)

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

Špirálu je možné vykresliť aj pomocou rekurzie, kde rekurzívne voláme funkciu na tkanie menších častí špirály, čo je však v tomto prípade nie úplne efektívne riešenie - išlo nám o naprogramovanie stroja na tkanie kobercov a ak by sme ho naprogramovali, aby začínal od vonkajšieho obvodu koberca a pokračoval až do stredu, v praxi by to bolo ťažko realizovateľné. Z programátorského hľadiska v prípade Imagine Loga nie je s vnáraním do rekurzie problém, pri Pythone je však hĺbka vnorenia obmedzená a program skončí s chybou.

Problém môže nastať aj s vytváraním zoznamu farieb pri rekurzívnom volaní - pokiaľ funkcii dáme ako parametre len jednotlivé farby (nie ich zoznam) a z nich v rámci funkcie vytvoríme zoznam, pri rekurzívnom volaní vytvárame tento zoznam stále nanovo (podľa hĺbky vnorenia to môže byť aj niekoľko stokrát!).

Medzi najčastejšie chyby pri riešení tejto úlohy patrí zbytočné používanie globálnych premenných (na riešenie postačia lokálne premenné), nestriedanie farieb alebo pravidelné striedanie farieb (pri opakovanom tkaní nevzniknú koberce s originálnym , unikátnym vzorom, ale len stále tie isté farebné vzory), nesúvislá špirála (pri použití bodov namiesto čiarových úsekov sa so zväčšujúcim krokom body začnú od seba vzďaľovať) a nedokreslenie špirály až do stredu (v strede koberca zostane po ukončení tkania veľká diera - taký koberec by sme si asi kúpiť nechceli...).

Úplne zbytočnou chybou bolo nedočítanie celého zadania - riešenie malo byť odovzdané v súbore s presne špecifikovaným názvom v zadaní úlohy - koberce.imp alebo koberce.py.