Autorské riešenie
[stiahni imp : py]                                       

  • Počet riešiteľov: 19 / 28 =  68%                       

  • Úspešnosť riešenia: cislo 2,49 / 6 = 42 %

Aby bolo riešenie prehľadnejšie, je dobré si to rozdeliť na časti. Využívame procedúry/funkcie spodnyRad a poschodie. Procedúra/funkcia spodnyRad vypočíta, aký široký má byť spodný rad. Procedúra/funkcia poschodie nám vykreslí poschodie so zadaným počtom polien.

Šírku spodného poschodia vieme určit tak, že postupne spočítavame čísla 1, 2, 3,..., až kým nedosiahneme alebo prvýkrát nepresiahneme zadaný počet polien. Šírka spodného poschodia teda bude posledné prirátané číslo.

Pyramídu kreslíme postupne po poschodiach. Na začiatku je daný počet polien, ktoré je potrebné vykresliť. Vždy si pamätáme počet polien, ktoré sme vykreslili. Ak sme ešte nedosiahli počet polien, ktoré treba vykresliť, pokračujeme.

Pyramída z 11 polien.

;Imagine Logo

viem spodnyRad :pocet
  urobTu "p 0
  urobTu "rad 0
  kým [:pocet>:p][
    urobTu "p :p+počítadlo
    urobTu "rad počítadlo
  ]
 výsledok :rad
koniec


viem poschodie :pocet
  nechfp "hnedá6
  opakuj :pocet[
    bod 40
    dopredu 40
  ]
  vzad (40*:pocet)
koniec


viem pyramida :pocet
  peroHore
  ak :pocet=0[
    ukonči
  ]
  urobTu "rad (spodnyRad :pocet)
  urobTu "nakreslene 0
  urobTu "pocetPoschodi 0
  kým [:pocet>:nakreslene][
    urobTu "nakreslit :pocet-:nakreslene
    ak2 :nakreslit>:rad[
      poschodie :rad
      urobTu "nakreslene :nakreslene+:rad
      vlavo 60
      dopredu 40
      vpravo 60
    ][
      poschodie :nakreslit
      urobTu "nakreslene :nakreslene+:nakreslit
    ]
    urobTu "pocetPoschodi :pocetPoschodi+1
    urobTu "rad :rad-1
  ]
  vlavo 60
   vzad (:pocetposchodi-1)*40
  vlavo 30
koniec

 

# Python

import turtle


def poschodie(pocet):
    ''' Kreslenie poschodia z aktuálnej pozície.

    :param pocet: počet polien v poschodí
    :type pocet: int
    '''
    for i in range(pocet):
        pero.dot(40, "brown")
        pero.forward(40)
    pero.backward(pocet * 40)


def spodnyRad(pocet):
    ''' Výpočet šírky spodného radu pyramídy.

    :param pocet: počet polien pyramídy
    :type pocet: int
    :return: pocet polien v spodnom rade
    :rtype: int
    '''
    p = 0
    rad = 0
    i = 1
    while pocet > p:
        p += i
        rad = i
        i += 1
    return rad


def pyramida(pocet):
    '''Kreslenie pyramídy z polien.

    :param pocet: počet všetkých polien
    :type pocet: int
    '''
    pero.penup()
    if pocet == 0:
        return
    rad = spodnyRad(pocet)
    nakreslene = 0
    pocetPoschodi = 0
    while pocet > nakreslene:
        nakreslit = pocet - nakreslene
        if nakreslit > rad:
            poschodie(rad)
            nakreslene += rad
            pero.left(60)
            pero.forward(40)
            pero.right(60)
        else:
            poschodie(nakreslit)
            nakreslene += nakreslit
        pocetPoschodi += 1
        rad -= 1
    pero.left(60)
    pero.backward((pocetPoschodi - 1) * 40)
    pero.right(60)
    pero.pendown


pero = turtle.Turtle()
tabula = turtle.Screen()
pyramida(1)
tabula.mainloop()

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

Častou chybou bolo vykresľovanie plnej pyramídy, kde parameter predstavoval počet poschodí a nie počet polien. Často tieto riešenia fungovali len do určitého počtu polien(pri takomto pochopení počet plných poschodí).

Jedno riešenie si pýtalo parametre počet poschodí, veľkosť polena a počet polien. Je zrejmé, že ľahko môže dôjsť ku kolízii medzi počtom poschodí a počtom polien.