Ответ: Алгоритм для Робота
нц пока слева свободно
влево
кц
нц пока (сверху свободно) и (не слева свободно)
если не слева свободно то
закрасить
все
вверх
кц
влево
нц пока снизу свободно
если не справа свободно то
закрасить
все
вниз
кц
нц пока сверху свободно
если не справа свободно то
закрасить
все
вверх
кц
У этого задания официального ключа нет, поэтому ответ получен в разборе и с ключом не сверен. Перед тем как заучивать результат, пройдите выкладки — там видно, откуда взялось каждое число.
Исполнитель Робот перемещается по бесконечному клетчатому полю. Между соседними по сторонам клетками могут находиться стены. Робот умеет выполнять команды «вверх», «вниз», «влево», «вправо» и «закрасить», а также проверять условия «сверху свободно», «снизу свободно», «слева свободно», «справа свободно». Условия можно использовать в командах «если», а для повторения команд — цикл «нц пока … кц».
На бесконечном поле есть горизонтальная и вертикальная стены. Левый конец горизонтальной стены соединён с нижним концом вертикальной стены. Длины стен неизвестны. В вертикальной стене есть ровно один проход; точное место прохода и его ширина неизвестны. Робот находится в клетке, расположенной непосредственно над горизонтальной стеной у её правого конца.
Напишите алгоритм, закрашивающий все клетки, расположенные непосредственно левее и правее вертикальной стены. Клетки прохода должны остаться незакрашенными. Робот не должен разрушиться, выполнение алгоритма должно завершиться, а алгоритм должен работать при любом допустимом расположении стен, прохода и его размерах. Робот должен закрасить только клетки, удовлетворяющие условию.
Где здесь ошибаются
Закрашивание каждой клетки на стороне стены без проверки наличия стены, из-за чего закрашивается проход.
Попытка пройти через вертикальную стену вне прохода.
Отсутствие отдельной обработки левой стороны вертикальной стены.
Использование условия «сверху свободно» без проверки положения прохода, из-за чего цикл может завершиться не в нужном месте.