Autorské riešenie
[stiahni [imp][py]]                                       

  • Počet riešiteľov: 15 / 28 =  54 %                       

  • Úspešnosť riešenia: 3,12 / 8 = 39 %                   

Riešenie tejto úlohy nie je náročné. Načo si musíme dať pozor je množstvo parametrov, ktoré potrebujeme brať do úvahy.

Pri porovnávaní bicyklov sledujeme dve vlastnosti:

  • akou najvyššou rýchlosťou sa na bicykli dá ísť,

  • aký najstrmší kopec na bicykli možno vyšliapať.

Aby sme dokázali tieto vlastnosti porovnať pre rôzne bicykle, predpokladáme pri porovnávaní rovnakú frekvenciu šliapania. Rozoberme si porovnanie oboch vlastností postupne.

Ako rýchlo sa na bicykli dá ísť

Ak sa zamyslíme nad porovnaním maximálnej rýchlosti u oboch bicyklov zistíme, že rýchlosť nevieme vypočítať. Nevieme totiž, aká je frekvencia šliapania. Preto predpokladáme, že frekvencia šliapania bude u oboch bicyklov rovnaká. Dôsledkom je, že stačí porovnať vzdialenosti, ktoré prejdú bicykle na jedno otočenie pedálmi. Bicykel ktorý prejde dlhšiu vzdialenosť pôjde rýchlejšie.

Keďže chceme dosiahnuť maximálnu rýchlosť, musíme zvoliť také prevody, aby bicykel prešiel čo najväčšiu vzdialenosť. To dosiahneme vtedy, ak vpredu použijeme najväčšie a vzadu najmenšie ozubené koliesko (takýto prevod sa označuje ako ťažký).

Označme si:

  • vpredu_max - počet zubov najväčšieho kolieska vpredu

  • vzadu_min - počet zubov najmenšieho kolieska vzadu

  • priemer_kolesa - priemer kolesa bicykla (zaujíma nás priemer hnacieho kolesa)

Ak pedálmi otočíme 1 krát, zadné koleso sa otočí vpredu_max / vzadu_min krát. Bicykel prejde vzdialenosť rovnú počtu otočení kolesa vynásobeného jeho obvodom: vpredu_max / vzadu_min * pi * priemer_kolesa. Bicykel, ktorý prejde väčšiu vzdialenosť môže ísť rýchlejšie.

Aký strmý kopec sa dá vyšliapať.

Podobne ako pri predchádzajúcej vlastnosti, ani tu nevieme porovnávanú vlastnosť vypočítať. Nevieme totiž, aká je frekvencia šliapania. Ale ani tu nám to vôbec nevadí. Stačí nám porovnať vzdialenosti, ktoré prejdú bicykle na jedno otočenie pedálmi. Bicykel ktorý prejde kratšiu vzdialenosť zvládne strmší kopec.

Keďže chceme zvládnuť čo najstrmší kopec, musíme zvoliť také prevody, aby bicykel prešiel čo najmenšiu vzdialenosť. To dosiahneme vtedy, ak vpredu použijeme najmenšie a vzadu najväčšie ozubené koliesko (takýto prevod sa označuje ako ľahký).

Označme si:

  • vpredu_min - počet zubov najmenšieho kolieska vpredu

  • vzadu_max - počet zubov najväčšieho kolieska vzadu

  • priemer_kolesa - priemer kolesa bicykla (zaujíma nás priemer hnacieho kolesa)

Ak pedálmi otočíme 1 krát, zadné koleso sa otočí vpredu_min / vzadu_max krát. Bicykel prejde vzdialenosť rovnú počtu otočení kolesa vynásobeného jeho obvodom: vpredu_min / vzadu_max * pi * priemer_kolesa. Bicykel, ktorý prejde menšiu vzdialenosť zvládne strmší kopec.

Na novom bicykli by sme chceli chodiť aspoň tak rýchlo ako na starom a zároveň chceme zvládnuť aspoň tak strmé kopce ako na starom. Na novom bicykli by sme na najľahšom prevode mali ísť pomalšie alebo rovnako rýchlo ako na starom a na najťažšom prevode rovnako rýchlo alebo rýchlejšie ako na starom.

Výsledné riešenie v Imagine logu môže vyzerať nasledovne:

;Imagine logo
viem porovnaj :stary_vpredu_max
              :stary_vpredu_min
              :stary_vzadu_max
              :stary_vzadu_min
              :stary_priemer_kolesa
              :novy_vpredu_max
              :novy_vpredu_min
              :novy_vzadu_max
              :novy_vzadu_min
              :novy_priemer_kolesa

  urobTu "stary_vzdialenost_na_sliapnutie_rychlo
         :stary_vpredu_max / :stary_vzadu_min * 3.14 * :stary_priemer_kolesa
  urobTu "stary_vzdialenost_na_sliapnutie_pomaly
         :stary_vpredu_min / :stary_vzadu_max * 3.14 * :stary_priemer_kolesa

  urobTu "novy_vzdialenost_na_sliapnutie_rychlo
         :novy_vpredu_max / :novy_vzadu_min * 3.14 * :novy_priemer_kolesa
  urobTu "novy_vzdialenost_na_sliapnutie_pomaly
         :novy_vpredu_min / :novy_vzadu_max * 3.14 * :novy_priemer_kolesa

  vysledok zaroven
  :novy_vzdialenost_na_sliapnutie_rychlo >= :stary_vzdialenost_na_sliapnutie_rychlo
  :novy_vzdialenost_na_sliapnutie_pomaly <= :stary_vzdialenost_na_sliapnutie_pomaly
koniec

Riešenie v Pythone môže vyzerať nasledovne:

#Python
import math


def porovnaj(stary_vpredu_max,
             stary_vpredu_min,
             stary_vzadu_max,
             stary_vzadu_min,
             stary_priemer_kolesa,
             novy_vpredu_max,
             novy_vpredu_min,
             novy_vzadu_max,
             novy_vzadu_min,
             novy_priemer_kolesa):
    stary_vzdialenost_na_sliapnutie_rychlo = \
        stary_vpredu_max / stary_vzadu_min * math.pi * stary_priemer_kolesa
    stary_vzdialenost_na_sliapnutie_pomaly = \
        stary_vpredu_min / stary_vzadu_max * math.pi * stary_priemer_kolesa

    novy_vzdialenost_na_sliapnutie_rychlo = \
        novy_vpredu_max / novy_vzadu_min * math.pi * novy_priemer_kolesa
    novy_vzdialenost_na_sliapnutie_pomaly = \
        novy_vpredu_min / novy_vzadu_max * math.pi * novy_priemer_kolesa

    return 
     novy_vzdialenost_na_sliapnutie_rychlo >= stary_vzdialenost_na_sliapnutie_rychlo \
     and \
     novy_vzdialenost_na_sliapnutie_pomaly <= stary_vzdialenost_na_sliapnutie_pomaly

Pozornejší z vás si isto všimli, že sme nikde nespomenuli jednotky, v akých sa priemer kolies meria. To ani nie je podstatné. Ak priemer meriame v cm, prejdená vzdialenosť bude v cm. Ak priemer meriame v palcoch, prejdená vzdialenosť bude v palcoch. Pre samotné porovnanie to nie je dôležité. Dôležité je to, aby sme priemery kolies obidvoch porovnávaných bicyklov merali v rovnakých jednotkách.

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

Pri tejto úlohe bolo častou chybou, že ste si neuvedomili, že vpredu aj vzadu môže byť viac ozubených kolies. Niektorí z vás uvažované parametre bicyklov vo funkcii/procedúre načítavali. Funkcia/procedúra by mala tieto hodnoty dostať v parametroch.

Vysledok, ku ktorému sa funkcia/procedúra má dopracovať, by mala funkcia/procedúra vráiť. Výpis vo funkcii/procedúre nie je najlepšie riešenie.