Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3586081
А
Аноним
17 марта 2026 14:04 · публичный вопрос
А
Аноним

Робот находится где-то в квадрате 2×2. Если там есть хотя бы одна закрашенная клетка, робот должен прийти в левый верхний угол. Если закрашенных клеток нет, то в правый нижний.…

Запрос пользователя

Робот находится где-то в квадрате 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() Проверить, чиста ли клетка

Ответ нейросети
17 марта 2026 14:04

Задача понятна: робот находится в любой из четырех клеток квадрата 2×2. Нужно определить, есть ли в этом квадрате закрашенная клетка. Если есть хоть одна закрашенная — перейти в левый верхний угол квадрата; если закрашенных нет — перейти в правый нижний угол. Все действия должны выполняться с использованием предложенных функций.

План решения

  • Сначала доберёмся до левого верхнего угла квадрата (это даст нам известную стартовую точку для сканирования).
    • Двигаемся влево до стены слева.
    • Затем двигаемся вверх до стены сверху.
  • Затем последовательно обследуем все четыре клетки квадрата, начиная с верхнего левого:
    • Проверяем текущую клетку на заполненность (cell_is_filled()).
    • Переходим к соседним клеткам по порядку: верхний правый, нижний правый, нижний левый, с проверками на наличие стены перед каждым перемещением.
  • В зависимости от того, найдена ли закрашенная клетка:
    • Если нашли: вернуться в левый верхний угол (снова через стены слева и сверху).
    • Если не нашли: перейти в правый нижний угол (через стены справа и снизу).

Почему работает этот подход

  • В 2×2 квадрате между клетками нет внутренних стен, поэтому перемещаться между соседними клетками можно, пока вокруг есть границы квадрата.
  • Проверка wall_from_left/right/up/down позволяет безопасно определить, достигли ли мы края квадрата и не пытаться двигаться за его пределы.
  • Обход всех четырех клеток обеспечивает корректную детекцию наличия любой закрашенной клетки независимо от начальной позиции робота.

Программа (используя только предложенные функции)

def go_to_top_left(): # Двигаемся к левому верхнему углу квадрата while not wall_from_left(): move_left() while not wall_from_up(): move_up()

def go_to_bottom_right(): # Двигаемся к правому нижнему углу квадрата while not wall_from_right(): move_right() while not wall_from_down(): move_down()

def main(): # 1) Приезжаем в левый верхний угол, чтобы начать сканирование go_to_top_left()

found = False

# 2) Обход и сканирование всех 4 клеток квадрата
# Проверяем текущую клетку (верхняя левая)
if cell_is_filled():
    found = True

# Перемещение к верхнему правому и проверка
if not wall_from_right():
    move_right()
    if cell_is_filled():
        found = True

# Перемещение к нижнему правому и проверка
if not wall_from_down():
    move_down()
    if cell_is_filled():
        found = True

# Перемещение к нижнему левому и проверка
if not wall_from_left():
    move_left()
    if cell_is_filled():
        found = True

# 3) Финальный выбор позиции в зависимости от найденного
if found:
    # Вернуться в левый верхний угол
    go_to_top_left()
else:
    # Перейти в правый нижний угол
    go_to_bottom_right()

Запуск программы

main()

Пояснение к коду

  • go_to_top_left() перемещает робота к самой левой и самой верхней клетке квадрата за счёт проверки стен.
  • go_to_bottom_right() аналогично перемещает к правому нижнему углу.
  • В процессе main() мы посещаем все четыре клетки и фиксируем, есть ли закрашенная клетка.
  • В конце роботу устанавливаем нужную целевую точку: либо левый верхний угол, либо правый нижний угол.