Задача № 4
Робот в квадрате 2×2. Две верхние клетки квадрата разделяет стенка. Робот должен закрасить отмеченные клетки и остановиться в правом нижнем углу квадрата.
Посмотреть все тесты
move_left()
Сделать шаг влево
move_right()
Сделать шаг вправо
move_up()
Сделать шаг вверх
move_down()
Сделать шаг вниз
fill_cell()
Закрасить клетку
free_from_up()
Проверить, свободно ли сверху
free_from_down()
Проверить, свободно ли снизу
free_from_left()
Проверить, свободно ли слева
free_from_right()
Проверить, свободно ли справа
wall_from_up()
Проверить, есть ли стена сверху
wall_from_down()
Проверить, есть ли стена снизу
wall_from_left()
Проверить, есть ли стена слева
wall_from_right()
Проверить, есть ли стена справа
cell_is_filled()
Проверить, закрашена ли клетка
cell_is_clean()
Проверить, чиста ли клетка
Понял задачу. Так как в квадрате 2×2 верхние клетки разделяет стенка, логично предположить, что отмечены именно верхние клетки (верхний левый и верхний правый). Тогда можно закрасить их и добраться до правого нижнего угла, обходя стенку снизу.
Пояснение к подходу
- Начинаем в верхней левой клетке (предположим такую стартовую позицию: (0,0)).
- Из-за стены между верхними клетками напрямую перейти из левого в правый верхний нельзя.
- Чтобы закрасить обе верхние клетки, нужно обойти через нижний ряд: сначала закрасить левую верхнюю, спуститься вниз, пройти вправо по нижнему ряду до правого столбца, подняться вверх к правой верхней, закрасить её, а затем вернуться в правый нижний угол, чтобы задача завершилась там.
Шаги решения (используя доступные команды)
1) fill_cell()
- Закрашиваем текущую клетку: верхнюю левую (0,0).
2) move_down()
- Переходим в нижнюю левую клетку (1,0).
3) move_right()
- Переходим в нижнюю правую клетку (1,1).
4) move_up()
- Поднимаемся в правую верхнюю клетку (0,1).
5) fill_cell()
- Закрашиваем правую верхнюю клетку (0,1).
6) move_down()
- Возвращаемся в правый нижний угол (1,1). Здесь задача завершается.
Почему так работает
- Стенка между верхними клетками закрывает прямой доступ между (0,0) и (0,1). Чтобы закрасить обе верхние клетки, нужно объехать снизу: сначала спуститься, пройти по нижнему ряду и подняться к нужной верхней клетке.
- В итоге закрашены обе верхние клетки, робот находится в правом нижнем углу квадрата, как и требуется.
Если задача подразумевала иные отмеченные клетки
- Сообщите, пожалуйста, какие именно клетки помечены. Тогда можно подобрать другую последовательность.
- Пример альтернативы (если, например, помечены нижние клетки): можно просто двигаться по нижнему ряду и закрашивать (1,0) и (1,1):
- move_down(), fill_cell(), move_right(), fill_cell()
- В этом случае робот также закончит в правом нижнем углу.
Дополнительные советы
- Если начальная позиция отличается от верхнего левого угла, скажите исходную клетку — адаптирую последовательность под неё.
- Можете проверить логику на аналогичной мини-матрице ещё раз: подумайте, какие клетки помечены и как обойти препятствия, чтобы добраться до нужной точки без нарушения ограничений стен.
Готов адаптировать решение под любые дополнительные параметры задачи — просто скажите, какие именно клетки помечены и с какой стартовой позицией начинаем.