Autorské riešenie
[stiahni]

  • Počet riešiteľov: 17 / 39 = 43,59 %

  • Úspešnosť riešenia: 3,59 / 5 =  71,8 %

Číslo dresu každého súťažiaceho tvorí poradové číslo tímu a poradové číslo súťažiaceho v rámci jeho tímu. Vypíšme si niekoľko prvých čísel dresov v prípade, že v každom tíme sú štyria súťažiaci:

priklad_cisel_dresov

Všimnime si, že (až na jednu výnimku) môžeme vypočítat prvú cifru dresu pomocou celočíselného delenia v tvare (cpodiel cislo pocetClenov)+1. Určite ste prišli na to, že spomínanou výnimkou je prípad, v ktorom číslo žiaka je deliteľné bezo zvyšku počtom súťažiacich v tíme. To však vieme vyriešiť tak, že každé číslo žiaka najprv zmenšíme o jednotku a až následne budeme toto číslo deliť. Celý príkaz na zistenie hodnoty prvej cifry vyzerá takto:

  urobTu "prvaCifra (cpodiel (cislo-1) pocetClenov)+1

Poďme na druhú cifru. Podobne si môžeme všimnúť, že až na spomínanú výnimku mi správne riešenie zabezpečí príkaz (zvysok cislo pocetClenov). Skúsme teda opäť číslo žiaka zmenšiť o jednotku a až z tejto hodnoty vypočítať zvyšok. Vidíme, že takto to už funguje aj pre našu výnimku v prípade, že vypočítaný zvyšok znova zvýšime o jednotku. Druhá cifra je teda vybavená.

  urobTu "druhaCifra (zvysok (cislo-1) pocetClenov)+1

Ak sa nám podarilo úspešné zvládnuť tieto dva kroky, celkový počet súťažiacich a spojenie dvoch cifier nám už určite nebude robiť problém. Výsledná procedúra pre výpočet čísla dresu môže teda vyzerať aj nasledovne:

viem pocitaj
  celkovo'nechHodnota pocetTimov'hodnota * pocetClenov'hodnota
  urobTu "prvaCifra (cpodiel (cislo-1) pocetClenov)+1
  urobTu "druhaCifra (zvysok (cislo-1) pocetClenov)+1
  dres'nechHodnota 10*:prva+:druha
koniec

Všimnime si, že pre zistenie hodnoty textového poľa v Imagine môžeme namiesto príkazu cislo'hodnota použiť skrátený príkaz cislo. Pri nastavení hodnoty pomocou príkazu dresy'nechHodnota však takýto skrátený zápis príkazu nie je možný.

Vaše zaujímavé riešenia:

Úlohu sa pokúsilo vyriešiť 17 tímov, objavilo sa viacero ďalších správnych a zaujímavých postupov:

  • osobitné testovanie podmienky pre zvyšok rovný nule

      ak (zvysok cislo pocetclenov)=0
         [dres'nechhodnota (10*cislo/pocetClenov + pocetClenov)]

  • postupné generovanie čísel dresov pre súťažiacich číslo 1,2,3,... s použitím cyklu kym a testovaním podmienok ak a ak2

    viem pocitaj
       celkovo'nechhodnota pocetClenov'hodnota * pocettimov'hodnota
       urobTu "sutaziaci cislo'hodnota
       urobTu "activeSutaziaci 1
       urobTu "tim 1
       urobTu "maxInTym pocetClenov'hodnota
       urobTu "clenovTMP 1
       urobTu "run 1
       urobTu "dress 0
       kym [:run = 1] [
         ak :activeSutaziaci = :sutaziaci [
           urobTu "run 0 urobTu "dress :tim *10
           urobTu "dress :dress + :clenovTMP
           ]
         ak2 :clenovTMP < :maxInTym
           [urobTu "activeSutaziaci :activeSutaziaci+1 urobTu "clenovTMP :clenovTMP+1]
           [urobTu "activeSutaziaci :activeSutaziaci+1
                  urobTu "tim :tim+1 urobTu "clenovTMP 1]
       ]
       dres'nechHodnota :dress
    koniec

  • výpočet druhej cifry odrátaním od celkového počtu súťažiacich

       celkovo'nechhodnota pocetClenov'hodnota * pocettimov'hodnota
       urobTu "rozdiel celkovo - cislo
       urobTu "druhaCifra pocetClenov - zvysok :rozdiel pocetClenov

Najčastejšie chyby:

  • nerozlišovanie príkazov hodnota (zistenie hodnoty) a nechhodnota (nastavenie hodnoty)
  • chýbajúce vyriešenie prípadu pre zvyšok rovný nule
  • výpis hodnôt iba do príkazového riadku (namiesto textových polí)
  • nesprávne čísla dresov pre súťažiacich hneď v prvom tíme (aj keď pre ostatné tímy bol výpočet správny)
  • nesprávne poradie operácií pri formulovaní príkazov (zlé použitie zátvoriek, násobenie má prednosť pred sčítaním a podobne)