Autorské riešenie
[stiahni]

Pri tejto úlohe potrebujeme vytvoriť zrkadlový obraz topánky zobrazenej na krabici. Aby sa nám to podarilo, potrebujeme vyriešiť niekoľko malých problémov.

Krabice sú rôzne veľké. Nemôžeme teda predpokladať žiaden konkrétny rozmer. Budeme musieť zosnímať celú ľavú časť krabice. Našťastie pokazená tlačiareň netlačí čiernu farbu. Takže ak pri testovaní narazíme na čiernu, budeme vedieť že sme na okraji (na hrane) krabice. Postupne teda budeme prechádzať po ľavej časti krabice (kym [farbaBodu <> "cierna]) a snímať farbu bodu (nechFP farbaBodu).

Všimnime si, aký je vzťah medzi zodpovedajúcimi bodmi na ľavej a na pravej časti krabice. Ich Y-ové súradnice sú rovnaké. X-ové súradnice sa líšia znamienkom. Bod [x, y] bude mať svoj zrkadlový obraz v bode [-x, y]. Pre každý zosnímaný bod teda vytvoríme jeho zrkadlový obraz na zrkadlových súradniciach a vrátime sa späť.

urobTu "x XSur
urobTu "y YSur
nechFP farbaBodu
nechXYSur -:x :y
bodka
nechXYSur :x :y

Samotný prechod po ľavej ploche krabice vyriešime jednoducho. Budeme postupovať po stĺpcoch. Zapamätáme si začiatok každého stĺpca (urobTu "sx XSur urobTu "sy YSur) a pokračujeme až pokiaľ nenarazíme na čiernu farbu. V tomto okamžiku vieme, že sme narazili na hranu krabice. Vrátime sa preto na začiatok nasledujúceho stĺpca (nechXYSur :sx+1 :sy). Celá procedúra môže vyzerať nasledovne:

viem kresliTopanku
 kym [farbaBodu <> "cierna] [
  urobTu "sx Xsur
  urobTu "sy Ysur
  kym [farbaBodu <> "cierna] [
   urobTu "x XSur
   urobTu "y YSur
   nechFP farbaBodu
   nechXYSur -:x :y
   bodka
   nechXYSur :x :y
   do 1
  ]
  nechXYSur :sx+1 :sy
 ]
koniec

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

  • Úlohu riešilo päť tímov. Len Peter Ralbovský vyriešil úlohu na plný počet bodov, ktorý v svojom riešení použil zoznamy. Ďalšie dve riešenia využili pevné rozmery krabice, pričom použili príkaz s pevným počtom opakovaní, namiesto použitia príkazu kým a testovania farby pozadia na farbu rôznu od čiernej. V ďalších dvoch riešeniach autori použili vlastnú korytnačku s upravenými tvarmi od pôvodnej korytnačky, ktoré odtláčali v ľavej časti krabice.