Найди в себе программиста!, или золотые команды оптимизатора

Игра, где роботу даются команды на выполнение
Как-то морозным февральским днем была найдена на просторах общего доступа интересная флешка «LightBot». На ее прохождение было потрачено примерно полдня и еще два дня ушло на фаллометрию с сотрудниками — мерились, кто затратит меньше ходов на прохождение всей игры.
скачать LightBot
Желаете попробовать?

Для тех, кто не сразу понял, что и как нужно делать, объясняю.

  1. Вам дается робот, с помощью которого необходимо отметить все синие клетки на поле (когда робот находится на синем поле, он должен включить лампочку — тогда поле станет желтым). Для этого роботу можно указать несколько команд
    • ход впередШаг вперед — робот сделает сделает шаг вперед. Если попытка не удастся (впереди будет стена или обрыв), то робот останется на месте
    • Развернуть робота на 90 градусов вправо — робот развернется на 90 градусов вправо и останется в этой же клетке
    • Развернуть робота на 90 градусов влево — робот развернется на 90 градусов влево и останется в этой же клетке
    • Дать команду роботу прыгнуть — робот прыгнет вперед. Если на следующей клетке нет ступеньки вверх или обрыва, то робот сделает прыжок на месте
    • Дать команду роботу включить лампочку — робот включит лампочку. Если робот окажется на синем поле, то поле поменяет цвет на желтый. Если поле было желтым, то оно станет синим. Если же поле было серым, то оно таким и останется
    • Функция для робота 1 — робот выполнит список команд, перечисленных в блоке первой функции
    • робот выполнит команды функции 2 — робот выполнит список команд, перечисленных в блоке второй функции
  2. В данном случае необходимо используя указанные выше команды, составить алгоритм для робота. Команды выполняются последовательно слева направо и сверху вниз. Команды указываются в основном методе программы — в блоке «main method» — доступно 12 ячеек для использования. Если блок пуст, то ни одна команда не будет роботом исполнена.
  3. Команды можно группировать в функции. Команды в функции выполняются аналогично командам в блоке «main method» с той лишь разницей, что доступно 8 ячеек. Блоки имеют название funct.1 и funct.2. Для выполнения блока команд, необходимо, чтобы был произведен вызов функции из основного блока «main method». Блок функций может быть и не указан в главном методе, но выполнятся — тогда он должен быть указан в другой функции, которая указана в главном методе.
  4. Функции могут вызывать сами себя. Это называется рекурсией. Иногда можно указать функции вызывать саму себя, если оставшиеся действия повторяются.
  5. Если все синие поля активированы, то миссия будет считаться выполненной вне зависимости от того, нужно ли еще что-то делать роботу или нет.

Ну вроде основные принципы работы робота расписал. Приведу пример прохождения первого уровня
LightBot прохождение первого уровня
В главный метод мы перетаскиваем две команды движения вперед и одну команду лампочки. После нажатия кнопки «GO», робот по указанному вами алгоритму пройдет на две клетки вперед и нажмет лампочку. Тем самым, активирует синее поле. После чего будет произведен переход в следующий уровень.

А теперь самое сладкое…
Мой официально зафиксированный рекорд — 156 ходов на все 12 уровней. Но я точно знаю, что можно пройти игру и за 154 хода. И я уверен, что можно и за меньшее количество. Ну и для того, чтобы подогреть ваш интерес, предлагаю устроить конкурс:
Кто сделает самый оптимальный алгоритм для прохождения данной игры, тот получит за каждую сохраненную команду по 100 рублей. Оптимальность будем считать от моего результата — от 156 ходов. Приз получит только один человек. Для подтверждения своих результатов, необходимо будет сделать скриншоты всех уровней. Результаты буду принимать до 9 мая 2012 года включительно.
Победителю деньги будут переведены на Webmoney Rub. Если у вас нет вебмани-кошелька, то завести его не составит труда.

Кидайте ссылку на пост друзьям — вместе каждый уровень дается легче — особенно, если знаешь, за сколько ходов он его прошел.

Ко мне пришли по этим поисковым фразам:

JohnnySuperb

Человек с разными склонностями и потребностями..

One Comment

Добавить комментарий