Autorské riešenie
V tejto úlohe je našim cieľom prepísať trasu zadanú pomocou súradníc do postupností otočení v bodoch trasy. Keďže medzi dvoma susednými bodmi trasy je vždy vzdialenosť 1 m, nemusíme ju uvádzať. Po každom otočení v mriežkovom bode trasy spravíme krok dĺžky 1 m. Všimnime si, že už zo zadania úlohy vieme zistiť pravidlá, ako sa trasa prepisuje: Bodová trasa: [[0, 0], [0, 1], [1, 1], [1, 2], [0, 2], [-1, 2] Trasa na mape: Uhlová trasa: [90, 270, 90, 90, 0]
Zhrňme si to:
Trochu sa nám miešajú absolútne smery (východ, sever, západ a juh) s relatívnymi otáčaniami v jednotlivých bodoch. Ak si budeme pamätať, ktorým smerom je korytnačka otočená pri príchode do aktuálneho bodu a vieme, ktorým smerom je trasa z aktuálneho bodu do bodu nasledujúceho, vieme poľahky vypočítať, o aký uhol sa musí korytnačka otočiť. Výsledný program môže vyzerať nasledovne:
Všimnime si niekoľko detailov. Na začiatku sme aktuálny smer (východ) nastavili na 0. Ostatné smery: sever, západ a juh majú hodnoty 90, 180 a 270 (v zmysle otáčania smerom vľavo). Pre zistenie, akým smerom je umiestnený nasledujúci bod, sme si vytvorili pomocnú funkciu zisti_smer. Porovnaním jednotlivých súradníc bodov vieme zistiť smer z jedného bodu do druhého. Zo zadania vyplýva, že z každého bodu trasy je možné pokračovať len štyrmi možnými smermi. Pre výpočet jednotlivých otočení nám stačí vypočítať rozdiel smeru kam chceme ísť a aktuálneho natočenia. Aby sme sa vyhli záporným uhlom, tento rozdiel nahradíme zvyškom po delení číslom 360. Vypočítaný uhol vložíme na koniec uhlovej trasy a zároveň aktualizujeme hodnotu pre aktuálny smer (podľa smeru k nasledujúcemu bodu). Tento postup realizujeme pre každú susednú dvojicu bodov trasy. Všimnime si, že počet dvojíc je o 1 menší než počet bodov trasy. Preto range(len(trasa) - 1). Vaše zaujímavé riešenia a najčastejšie chyby Dva tímy neošetrili situáciu, keď na vstupe je prázdny alebo jednoprvkový zoznam. Aj toto je technicky správny zoznam adries. Úplne správne riešenie mal tím "raketak" a má našu pochvalu. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |