Ограничения: время – 100ms/100ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод 
Послать решение Blockly Посылки Темы Где Обсудить (0)
Вы должны написать программу для управление защитником в игре, объединяющей Space Invaders и Tower Defence.
Игра происходит на поле размером `8 xx 22`.
Счетчик перед первым столбцом поля показывает оставшееся время до появления следующего инопланетянина в этой строке.
Инопланетяне появляются слева через каждые 22 единицы времени и движутся вправо на 1 соседнюю клетку в конце каждой единицы времени.
Защитник находится в правом столбце в 1 строке и может перемещаться вверх/вниз и
стрелять за 1 единицу времени (количество выстрелов не ограничено).

Цель игры - предотвратить попадание инопланетян в крайний правый столбец в течение 256 единиц времени.
Для написания программы вы можете использовать следующие блоки, заданные в категории "Робот":

Первые две команды позволяют роботу перемещаться в соответствующем направлении на 1 строку за 1 единицу времени.
Если выполнение команды движения невозможно, то она игнорируется.
Третья команда приказывает роботу стрелять влево. Выстрел выполняется в течение 1 единицы времени. Если в этой строке
есть инопланетянин, то он будет уничтожен. Так как количество выстрелов не ограничивается, вы можете использовать
эту команду для пропуска хода защитника.
Выполнение остальных команд не требует времени.
Четвертая команда позволяет узнать расстояние до инопланетянина в текущей строке и
может использоваться в командах арифметических вычислений и сравнений. Если инопланетянина в текущей строке нет,
то команда возвращает -1.
Пятая команда позволяет узнать номер строки, в которой находится защитник.
Вы можете использовать также команды ветвления, циклов, арифметических и логических вычислений, сравнений, переменные и константы,
которые находятся в категориях "Логические", "Циклы", "Математика" и "Переменные".

Для создания переменной в категории "Переменные" нужно щелкнуть по кнопке "Создать переменную" и ввести её название, например, "a".
После этого в категории "Переменные" появятся блоки для получения и изменения значения переменной.
Например, для решения задачи "Два инопланетянина появляются в начальный момент времени в строках 1 и 2" (см. рисунок выше)
можно написать такую программу:

Если программа завершится раньше, чем пройдет 256 единиц времени игры, то миссия будет провалена.
Выполнение программы завершается после 256 единиц времени игры, но уже успехом, даже если есть ещё команды для выполнения.
В этом примере программы цикл выполняется 100 раз, хотя для достижения цели достаточно 64 раза.
Для запуска программы используйте кнопки:

Первая кнопка позволяет отправить ваше решение для проверки в проверяющую систему соревнований, вторая кнопка выполняет запуск программу локально, третья –
пошаговое выполнение или временная остановка программы, четвертая -- завершение выполнения программы, после которой программа будет выполняться сначала.
Можно изменить начальное расположение инопланетян и время до их появления, щелкая левой (+) и правой (-) кнопкой мыши на числах в колонке "Волны".
Число 0 означает, что инопланетянин появится в первом столбце соответствующей строки при запуске программы.
*Система оценки и описание подзадач*
||.u|Подзадача 1 (25 баллов)||
Волна инопланетян появляется в верхней и нижней строке одновременно в начале игры, новая волна через 22 единицы времени.

||.u|Подзадача 2 (50 баллов)||
Необходимые подзадачи: 1
Волна инопланетян появляется во всех строках одновременно, новая волна через 22 единицы времени.

(Правильное решение этой подзадачи является также решением и для подзадачи 1, так как программа,
уничтожающая волну из 8 инопланетян, сможет справиться и с любым меньшим количеством в волне, даже делая лишние выстрелы).
||.u|Подзадача 3 (25 баллов)||
Необходимые подзадачи: 1,2
Инопланетяне появляются в строках случайные моменты времени, но снова в этой строке через 22 единиц времени.
Баллы за подзадачу 3 начисляются только в случае, если все тесты в подзадаче успешно пройдены.
По запросу сообщается о первой ошибке.
---
Для написания программы для робота используется [специальная версия среды Blockly](blockly/2858.html).
Вы можете использовать полную среду Blockly при решении других задач этого соревнования, выбрав пункт Blockly