Autorské riešenie
[stiahni imp : py]

  • Počet riešiteľov: 2 / 4 =  50%

  • Úspešnosť riešenia:  5,5 / 6 = 92%

Kým začneme programovať riešenie tejto úlohy, najskôr trochu porozmýšľajme.

Korytnačky sa môžu rozdeľovať do rôzne veľkých tímov. Podmienkou je to, aby každý tím mal rovnaký počet hráčov. Ak už sa korytnačky rozdelia, potrebujeme spravodlivo rozdeliť aj lopty. To teda znamená, že ak sa vedia korytnačky rozdeliť na nejaký počet tímov, na rovnaký počet sa musia dať rozdeliť aj lopty.

Rečou matematiky povedané. Ak nejaké číslo je deliteľom počtu korytnačiek, musí byť aj deliteľom počtu lôpt. Stačí teda otestovať či každý deliteľ počtu korytnačiek je zároveň deliteľom počtu lôpt. Riešenie by mohlo vyzerať napríklad takto:

;Imagine logo
viem daSaRozdelit :lopty :korytnacky
  opakuj :korytnacky [
    ak zvysok :korytnacky pocitadlo = 0 [
      ak zvysok :lopty pocitadlo <> 0 [
        vy "nie
      ]
    ]
  ]
  vy "ano
koniec

#Python
def daSaRozdelit(lopty, korytnacky):
    '''
    Zisti, ci sa lopty daju rovnomerne rozdelit medzi lubovolne vytvorene a rovnako velke skupiny vytvorene zo vsetkych korytnaciek .

    :param lopty: pocet lop
    :type lopty: int
    :param korytnacky: pocet korytnaciek
    :type korytnacky: int
    :return: daju sa lopty rozdelit medzi korytnacky?
    :rtype: bool
    '''

    for i in range(2, korytnacky+1):
        if korytnacky % i == 0:
            if lopty % i != 0:
                return False
    return True

Tu by sme si mohli vydýchnuť a tešiť sa z toho, že sme úlohu vyriešili. Ale, nedá sa to vyriešiť aj šikovnejšie?

Všetky delitele počtu korytnačiek musia byť deliteľmi počtu lôpt. Ak teda zapíšeme počet korytnačiek v tvare súčinu dvoch činiteľov, oba činitele musia byť deliteľom počtu lôpt.

Ak počet korytnaciek =  počet korytnačiek * 1, tak počet korytnačiek a 1 musia byť deliteľom počtu lôpt. Inak povedané, počet lôpt musí byť násobkom počtu korytnačiek. Vylepšené riešenie môže vyzerať napríklad takto:

;Imagin logo
viem daSaRozdelit1 :lopty :korytnacky
  vy zvysok :lopty :korytnacky = 0
koniec

#Python
def daSaRozdelit1(lopty, korytnacky):
    '''
    Zisti, ci sa lopty daju rovnomerne rozdelit medzi lubovolne vytvorene a rovnako velke skupiny vytvorene zo vsetkych korytnaciek .

    :param lopty: pocet lop
    :type lopty: int
    :param korytnacky: pocet korytnaciek
    :type korytnacky: int
    :return: daju sa lopty rozdelit medzi korytnacky?
    :rtype: bool
    '''

    return lopty % korytnacky == 0 

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

Úlohu riešili dva tímy. Obidve riešenia vracali správne výsledky. Jedno však bolo efektívne a testovalo len to, čo počet lôpt je násobkom počtu korytnačiek.