Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №2999291
А
Аноним
20 марта 2025 11:19 · публичный вопрос
А
Аноним

Робот находится где-то в прямоугольнике. Он должен сделать один шаг в первом найденном свободном направлении (где нет стенки). Проверять направления надо в таком порядке: сверху,…

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

Робот находится где-то в прямоугольнике. Он должен сделать один шаг в первом найденном свободном направлении (где нет стенки). Проверять направления надо в таком порядке: сверху, справа, снизу, слева.

Ответ нейросети
20 марта 2025 11:19

Для решения задачи о перемещении робота в прямоугольнике, давайте разберёмся, как можно организовать эту логику по шагам, с учётом указанных направлений (сначала вверх, затем вправо, потом вниз и влево).

Шаг 1: Определение положения робота

Представьте, что у вас есть двумерный массив, который представляет прямоугольник. Например, можно использовать 0 для обозначения свободного места и 1 для стенки.

rectangle = [
    [0, 1, 0, 0],
    [0, 0, 1, 0],
    [1, 0, 0, 0],
]
robot_position = (1, 0)  # координаты робота (строка, столбец)

Шаг 2: Проверка направлений

Теперь мы должны проверить, есть ли свободное пространство в направлениях, указанных в задаче. Нам нужно определить, как находятся индексные значения для проверки каждого направления.

  1. Вверх (сдвиг по строкам -1)
  2. Вправо (сдвиг по столбцам +1)
  3. Вниз (сдвиг по строкам +1)
  4. Влево (сдвиг по столбцам -1)

Шаг 3: Реализация логики перемещения

Создадим функцию, которая будет проверять каждое направление. Если в каком-то направлении есть свободное место, робот сделает шаг в этом направлении.

def move_robot(rectangle, robot_position):
    row, col = robot_position
    directions = [(-1, 0), (0, 1), (1, 0), (0, -1)]  # (строка, столбец) для вверх, вправо, вниз, влево
    for d in directions:
        new_row = row + d[0]
        new_col = col + d[1]
        # Проверяем, не выходит ли новый индекс за границы массива и свободно ли место
        if 0 <= new_row < len(rectangle) and 0 <= new_col < len(rectangle[0]) and rectangle[new_row][new_col] == 0:
            return (new_row, new_col)  # Возвращаем новое положение робота
    return robot_position  # Если нет свободных мест, остаёмся на месте

# Пример использования:
new_position = move_robot(rectangle, robot_position)
print(new_position)  # Выводим новое положение робота

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

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

Заключение

Таким образом, мы создали логику, которая позволяет роботу перемещаться в заданных направлениях, избегая стен. Проверка происходит в определённом порядке, что соответствует требованиям задачи.