Autorské riešenie
[stiahni]

  • Počet riešiteľov: 3 / 5 = 60 %

  • Úspešnosť riešenia: 4 / 7 =  57 %

Jaskyniari namerali hodnoty dĺžok stalagmitov a stalagtitov, ktoré sú uložené v dvoch zoznamoch. Na to, aby sme vyriešili túto úlohu, potrebujeme nájsť najmenšiu medzeru medzi jednotlivými stalagmitmi a stalagtitmi.

obrazok

Z predchádzajúceho obrázka je zrejmé, že napríklad medzeru medzi prvou dvojicou vypočítame tak, že od výšky jaskyne odpočítame dĺžku prvého stalagmitu a prvého stalagtitu:

   urobTu "prvaHodnota prvok 1 :dlzkaStalagmitov
   urobTu "druhaHodnota prvok 1 :dlzkaStalagtitov
   urobTu "medzera (vyska - :prvaHodnota - :druhaHodnota)

Takto postupne prejdeme každú dvojicu kvapľov (ich počet je uložený v globálnej premennej :n) a spomedzi všetkých medzier nájdeme tú najmenšiu:

   urobTu "minimum 400
   opakuj :n [
     urobTu "prvaHodnota prvok pocitadlo :dlzkaStalagmitov
     urobTu "druhaHodnota prvok pocitadlo :dlzkaStalagtitov
     urobTu "medzera (vyska - :prvaHodnota - :druhaHodnota)
     ak (:medzera < :minimum) [
       urobTu "minimum :medzera
     ]
   ]

Netreba zabudnúť na to, že kvaple rastú proti sebe. Preto sa táto medzera skráti o 2 korytnačie kroky už za jeden rok. Počet rokov do prvého spojenia následne vypočítame a zapíšeme do textového poľa takýmto jednoduchým príkazom:

   doba'nechHodnota :minimum/2

Na záver už len potrebujeme postupné narastanie dĺžky kvapľov aj graficky znázorniť. Ak využijeme príkazy, pomocou ktorých sa tieto kvaple pôvodne vykreslili, tak naprogramovaná animácia môže mať takúto podobu:

   urobTu "aktualnyrok 0
   opakuj doba [
     urobtu "x -300 urobTu "y -200
     ph nechXYsur :x :y pd
     urobTu "aktualnyrok :aktualnyrok + 1
     rok'nechHodnota pocitadlo

     opakuj :n [
       urobTu "hrubka prvok pocitadlo :hrubkaStalagmitov
       urobTu "dlzka prvok pocitadlo :dlzkaStalagmitov
       urobTu "dlzka :dlzka + :aktualnyrok
       cencul :x :y :hrubka :dlzka
       urobTu "x :x + (600/:n)
     ]

     urobtu "x -300 urobTu "y 200
     vp 180 ph nechXYsur :x :y pd

     opakuj :n [
       urobTu "hrubka prvok pocitadlo :hrubkaStalagtitov
       urobTu "dlzka prvok pocitadlo :dlzkaStalagtitov
       urobTu "dlzka :dlzka + :aktualnyrok
       cencul :x :y :hrubka :dlzka
       urobTu "x :x + (600/:n)
     ]
     vp 180
     cakaj 500
   ]

Vaše zaujímavé riešenia:

Úlohu riešili 3 tímy, prvý z nich vyriešil úlohu úplne (dokonca doplnil aj zaokrúhľovanie výsledného počtu rokov a riešenie detailne okomentoval). Druhý tím úlohu takisto vyriešil správne, avšak v riešení chýbalo postupné vykresľovanie narastania kvapľov v jednotlivých rokoch. Tretí tím svoje riešenie nestihol, avšak prvé príkazy naznačovali, že ich myšlienka hľadania veľkosti medzier smeruje na prehľadávanie celej plochy obrazovky.