Решение на Втора задача от Георги Киряков
Резултати
- 6 точки от тестове
- 0 бонус точки
- 6 точки общо
- 20 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
.................... Finished in 0.01846 seconds 20 examples, 0 failures
История (3 версии и 3 коментара)
Георги обнови решението на 16.10.2015 00:33 (преди над 9 години)
В метод danger? бях cбъркал danger_in_move_two с dager_in_move_two.
На втори ред трябва да има място преди затварящата скоба на блока.
Следват няколко не-толкова-дребнави-коментара :
Начина, по който намираш новата позиция за храна е малко проблемен. Представи си, че имаш дъска 1000 на 1000 и змията е станала толкова голяма, че заема 80% от дъската. Тогава шанса условието на while
цикъла на 22 ред да е false
също е ~ 80%. И тъй като имаш 1 000 000 възможни позиции този while
цикъл ще трябва да направи средно 800 000 итерации докато стигне до свободна клетка. Принципно в курса не целим бързодействие на алгоритмите, но просто този подход към проблема не е добър.
Можеш да мислиш за проблема така - имаш някакво множество от свободни позиции, избираш на произволен принцип една от тях.
Освен това избор на произволен елемент от колекция се използва често, тъй че може да провериш за някакъв подходящ метод от Array
примерно.
В obstacle_ahead?
можеш вместо да достъпваш с []
нужните координати всеки път, подавайки някакъв индекс, би било по-готино да си направиш някакви променливи за координатите по x
и y
и да си ползваш тях при сравненията. Можеш също да извадиш wall_ahead?
като отделена функция и да направиш подобна функция и за проверката дали има змия на следващата позиция, а obstacle_ahead?
да вика въпросните функции.
В danger?
малко си се престарал с използването на променвили. Пробвай без тях .
Супер яко е, че си видял как се ползва map
с индекс, но конкретно за целите на next_position
функцията се опитай да подходиш по-просто. Освен това имена на променливи e
и i
ще ти костват точки.
Георги обнови решението на 18.10.2015 19:29 (преди над 9 години)
В new_food не се сетих за друг начин, по който да направя множество от свободни позиции.