Робот КуМир: как закрасить клетки только там, где сверху стена, двигаясь по коридору?
Робот идёт по горизонтальному коридору вправо. Надо закрашивать не все клетки подряд, а только те, у которых сверху есть стена. Я умею двигаться и красить, но не пойму, как совместить условие и цикл. Помогите собрать.
2 ответа
Здесь нужны цикл и условие вместе: цикл ведёт Робота вправо, а внутри если решает, красить ли текущую клетку.
нц пока справа свободно
если сверху стена
то
закрасить
все
вправо
кц
если сверху стена
то
закрасить
все
Логика: на каждом шаге смотрим — есть ли сверху стена. Если да — красим, если нет — пропускаем. Потом шагаем вправо.
Обрати внимание на блок если ... то ... все после цикла: это докрашивает последнюю клетку у правой стены (по той же причине, что цикл пока справа свободно не доходит до самой крайней клетки). Если по условию красить надо включая последнюю — этот хвост обязателен.
Частая ошибка тут — поставить вправо до проверки. Тогда Робот проверяет уже не ту клетку, в которой стоял, а следующую, и красит со сдвигом. Правило: сначала проверяем и красим текущую клетку, и только потом шагаем дальше.