Autorské riešenie Pri riešení tejto úlohy si bolo potrebné uvedomiť, že čísla áut uchovávame v zozname. Keďže počet áut na križovatke môže byť od 1 do 4, bolo potrebné na začiatku rozlíšiť, či počet prvkov v zozname je 1, 2, 3 alebo 4. Pomocný súbor s pripravenou procedúrou môže však vygenerovať aj situáciu, v ktorej sa na križovatke neobjaví žiadne auto. V takom prípade je potrebné uvažovať o situácii, kedy je náš zoznam prázdny. Pre každú z týchto situácií následne vyriešime všetky možné kombinácie áut na križovatke. Na obrázku vidíme situáciu s 3 autami: Ak na križovatke nebude žiadne auto, postačí nám výpis, že v tejto situácii nie je čo riešiť:
ak pocet :zoznam = 0 [pis "|Na križovatke momentálne nemáme žiadne auto!|] Ak je na križovatke iba jedno auto, tak sa s ňou nemusíme trápiť. Stačí zistiť, ktoré auto to je a poslať ho na druhú stranu križovatky:
ak pocet :zoznam = 1 [ Zložitejšiu situáciu máme, ak sú na križovatke dve autá. Buď vyriešime všetky kombinácie osobitne, alebo využijeme to, že autá sú v zozname usporiadané v rastúcom poradí. Ak by to tak nebolo, zoznam na začiatku ešte utriedime. Ak v našom dvojprvkovom utriedenom zozname je rozdielom oboch prvkov (čísel áut) hodnota 2, tak autá stoja na križovatke oproti sebe a vtedy môžu prejsť križovatkou súčasne. Ak je rozdiel čísel v zozname rovný hodnote 3, tak na križovatke sú autá 1 a 4 a teda prvé vyrazí auto č.1. Ak sú na križovatke dve autá stojace vedľa seba (rozdiel čísel v zozname je rovný 1), tak prvé auto vyrazí to, ktorého číslo je väčšie.
ak pocet :zoznam = 2 [ Ak budú na križovatke tri autá, stačí zistiť, ktoré z áut sa nenachádza v zozname a potom už križovatku vieme ľahko vyriešiť:
ak pocet :zoznam = 3 [ Nakoniec vyriešime situáciu so 4 autami. Vtedy je dôležité dohodnúť sa, ktoré auto prejde križovatkou ako prvé. V našom riešení to bude auto č. 1:
ak pocet :zoznam = 4 [ Zaujímavé riešenia: Vaše riešenia v prevažnej väčšine využívali pripravený zoznam na evidenciu áut na križovatke. Niektorí ste sa pohrali aj s tým, či pôjde auto cez križovatku pomalšie, alebo rýchlejšie, prípadne ste auto po prejdení križovatky skryli. Uvádzame iba túto časť kódu napríklad pre súčasný prechod dvoch protistojacich áut:
[pre [k1 k3] [opakuj 300[do 1 cakaj 1] skry]] Niektoré riešenia boli navrhnuté ako postupné skúmanie všetkých kombinácií, iné sa snažili odhaliť nejaké zákonitosti, ktoré na križovatke platia. Situáciu pre 4 autá niektorí z vás vyriešili tak, že cez križovatku pustili niektoré z áut a potom už uplatnili pravidlo pravej ruky, niektorí výpisom dali najavo, že na križovatke nastala chyba a ďalej sa už tým nezaoberali. Najčastejšie chyby:
| ||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |