Autorské riešenie
[stiahni imp : py]

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

  • Úspešnosť riešenia:  3,9 / 4 = 97%

Hraciu dosky hry Mlyn tvoria štvorce, úsečky a kruhy. Rozložme si teda úlohu na opakujúce sa časti. Začnime troma štvorcami rôznej veľkosti. Dĺžka strany prostredného štvorca je dvakrát väčšia ako dĺžka strany najmenšieho štvorca. Dĺžka strany najväčšieho štvorca je trikrát väčšia ako dĺžka strany najmenšieho štvorca. Vo vrcholoch štvorca sa nachádzajú malé kruhy.

časť dosky

Ostáva nám vykresliť úsečky, ktoré spájajú stredy strán jednotlivých štvorcov. Na miestach, v ktorých sa tieto úsečky pretínajú so štvorcami, budú tiež vykreslené malé kruhy.

doska

Naše riešenie môžeme doplniť parametrom, pomocou ktorého určíme dĺžku strany najväčšieho štvorca.

Nasledujú možné riešenia v jazyku Imagine Logo a Python.

;Imagine logo
viem stvorec :strana :velkostBodky
   ph
   vz :strana/2
   vl 90
   do :strana/2
   vp 90
   pd
   opakuj 4[
     do :strana
     bod :velkostBodky
     vp 90
     ]
   ph
   vp 90
   do :strana/2
   vl 90
   do :strana/2
koniec

viem doska :dlzka
   znova
   urobTu "velkostBodky :dlzka/25
   stvorec :dlzka :velkostBodky
   stvorec :dlzka/6*4 :velkostBodky
   stvorec :dlzka/6*2 :velkostBodky
   opakuj 4 [
     ph do :dlzka/6 pd
     bod :velkostBodky do :dlzka/6
     bod :velkostBodky do :dlzka/6
     bod :velkostBodky ph
     vz :dlzka/2 pd
     vp 90
  ]
koniec
koniec

 

#python

import turtle

kor = turtle.Turtle();
plocha = turtle.Screen();

# vykresli stvorec, ktory vo svojich vrcholoch vykresli bodku velkosti velkostBodky
def stvorec(strana,velkostBodky):
  '''
   :param strana - strana stvorca, velkostBodky - velkost bodky
   :type float
   :return
   :rtype:
  '''


  kor.penup()
  kor.back(strana/2)
  kor.left(90)
  kor.forward(strana/2)
  kor.right(90)
  kor.pendown()
  for i in range(4):
     kor.forward(strana)
     kor.dot(velkostBodky)
     kor.right(90)
  kor.penup()
  kor.right(90)
  kor.forward(strana/2)
  kor.left(90)
  kor.forward(strana/2)

# vykresli celu dosku
def doska(dlzka):
  '''
   :param dlzka - velkost hracej plochy
   :type float
   :return
   :rtype:
   '''


# vykreslim tri sustredne stvorce, velkost bodky je 1/25 zo strany najvacsieho stvorca
   velkostBodky = dlzka/25
   stvorec(dlzka,velkostBodky)
   stvorec(dlzka/6*4,velkostBodky)
   stvorec(dlzka/6*2,velkostBodky)
# vykreslim ciary spajajuce stredy stran stvorcov, v priesecnikoch nakreslim bodky
   for i in range(4):
     kor.penup()
     kor.forward(dlzka/6)
     kor.pendown()
     kor.dot(velkostBodky)
     kor.forward(dlzka/6)
     kor.dot(velkostBodky)
     kor.forward(dlzka/6)
     kor.dot(velkostBodky)
     kor.penup()
     kor.back(dlzka/2)
     kor.pendown()
     kor.right(90)
   kor.ht()

doska(200)
plocha.mainloop();

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

Úlohu riešilo 19 tímov, všetky v jazyku Imagine. Väčšina tímov úlohu vyriešila správne. Objavilo sa niekoľko nepresností vykreslením čiar, ktoré vyčnievali z dosky. Jeden tím naprogramoval riešenie, ktoré namiesto štvorcov vykreslilo 4 rovnako opakujúce sa časti dosky:


viem doska
  opakuj 4 [
    ph vz 25 pd bod 5 vp 90 do 25 bod 5 vz 25 vl 180 do 25 bod 5 vz 25 vp 90 vz 25 vp 90
    do 50 bod 5 vz 100 bod 5 do 50 bod 5 vl 90 vz 25 bod 5 vp 90 do 75 bod 5 vz 150 bod 5
    do 75 vl 90 ph do 75 vp 90
  ]
koniec