Задание 15 ОГЭ по информатике 2027: алгоритм для исполнителя Робот

Задание 15 ОГЭ по информатике — алгоритм для исполнителя «Робот»: нужно закрасить клетки у стен, длина которых неизвестна. Алгоритм пишут в учебной среде «Кумир» или в текстовом файле, он должен работать при любой длине стен, и за верное решение ставят 2 балла.

Как решать

У Робота девять команд: четыре движения (вверх, вниз, влево, вправо), команда закрасить и четыре проверки (сверху свободно, снизу свободно, слева свободно, справа свободно). Проверки ставят в условие цикла нц пока … кц и ветвления если … то … все, их можно соединять связками и, или, не.

Длина стен в задании неизвестна, поэтому каждое движение вдоль стены делают циклом «пока»: например, «нц пока не справа свободно» ведёт Робота вдоль стены, которая стоит справа от него, пока стена не кончится. Команду закрасить ставьте внутри цикла перед перемещением, а последнюю клетку участка проверьте отдельно после цикла: в ней тело цикла уже не выполняется.

Разбейте путь на участки: вдоль одной стены, поворот, вдоль другой. Для каждого участка напишите свой цикл и отметьте на рисунке, где Робот окажется после его окончания. Если Робот получит команду идти сквозь стену, он разрушится.

Проверьте алгоритм на поле из условия и на полях с другой длиной стен, в том числе с самой короткой: стена длиной в одну клетку часто ломает первый вариант решения. В «Кумире» это делают прямо на поле исполнителя, а при подготовке ту же проверку можно сделать программой на Python, как в примерах ниже.

По критериям демоверсии 2 балла ставят, если алгоритм правильно работает при всех допустимых исходных данных. 1 балл — если при всех допустимых данных алгоритм завершается, Робот не разбивается, закрашено не больше 10 лишних клеток и незакрашенными осталось не больше 10 нужных клеток.

Примеры с решением

Пример 1

На бесконечном поле есть две вертикальные стены одинаковой длины, между ними коридор шириной в одну клетку. Длина стен неизвестна. Робот находится в верхней клетке коридора. Напишите для Робота алгоритм, который закрашивает все клетки коридора и клетку, расположенную непосредственно под коридором. Конечное положение Робота может быть любым, алгоритм должен работать при любой длине стен.

Один из возможных вариантов поля (Р — Робот, │ — стены):

│Р│
│ │
│ │
│ │
│ │
│ │

Алгоритм для Робота

использовать Робот
алг коридор
нач
  нц пока (не слева свободно) и (не справа свободно)
    закрасить
    вниз
  кц
  закрасить
кон

Проверка на Python

# Проверка алгоритма для Робота: коридор между двумя вертикальными стенами.
# Клетка — (строка, столбец), строки растут вниз; стена — пара соседних клеток.


def run(length):
    walls = set()
    for r in range(length):
        for side in (-1, 1):  # стены слева и справа от столбца 0
            walls.add(((r, 0), (r, side)))
            walls.add(((r, side), (r, 0)))
    robot = [0, 0]  # верхняя клетка коридора
    painted = set()

    def free(dr, dc):
        here = tuple(robot)
        return (here, (robot[0] + dr, robot[1] + dc)) not in walls

    def paint():
        painted.add(tuple(robot))

    def down():
        assert free(1, 0), 'Робот разбился'
        robot[0] += 1

    # алгоритм из примера, команда в команду
    while not free(0, -1) and not free(0, 1):  # нц пока (не слева свободно) и (не справа свободно)
        paint()
        down()
    paint()

    need = {(r, 0) for r in range(length + 1)}  # клетки коридора и клетка под ним
    assert painted == need, f'длина {length}: закрашено не то'
    return len(painted)


for length in range(1, 11):
    run(length)
print(run(6))  # поле с рисунка

Ответ: 7

Цикл ведёт Робота вниз, пока слева и справа от него стоят стены, и закрашивает каждую клетку коридора. Когда стены кончаются, условие цикла ложно, и команда закрасить после цикла закрашивает клетку под коридором. Проверка на Python выполняет те же команды на полях с коридором длиной от 1 до 10 клеток и сравнивает закрашенные клетки с нужными; для поля с рисунка она печатает 7: шесть клеток коридора и клетка под ним.

Пример 2

На бесконечном поле есть горизонтальная стена, в которой есть несколько проходов шириной в одну клетку. От правого конца горизонтальной стены вниз отходит вертикальная стена. Длины стен, число и положение проходов неизвестны. Робот находится в клетке непосредственно под горизонтальной стеной у её левого конца, над Роботом стена есть. Напишите для Робота алгоритм, который закрашивает все клетки под горизонтальной стеной, над которыми есть проход. Конечное положение Робота может быть любым.

Один из возможных вариантов поля (Р — Робот, пробел в верхней строке — проход):

─── ── ─── ──┐
Р            │
             │
             │

Алгоритм для Робота

использовать Робот
алг проходы
нач
  нц пока справа свободно
    если сверху свободно то
      закрасить
    все
    вправо
  кц
  если сверху свободно то
    закрасить
  все
кон

Проверка на Python

# Проверка алгоритма для Робота: горизонтальная стена с проходами и вертикальная стена справа.
from itertools import combinations


def run(width, gaps):
    walls = set()

    def wall(a, b):
        walls.add((a, b))
        walls.add((b, a))

    for c in range(width):
        if c not in gaps:
            wall((0, c), (-1, c))  # горизонтальная стена над строкой 0
    for r in range(4):
        wall((r, width - 1), (r, width))  # вертикальная стена справа
    robot = [0, 0]  # под левым концом горизонтальной стены
    painted = set()

    def free(dr, dc):
        return ((robot[0], robot[1]), (robot[0] + dr, robot[1] + dc)) not in walls

    def right():
        assert free(0, 1), 'Робот разбился'
        robot[1] += 1

    # алгоритм из примера, команда в команду
    while free(0, 1):  # нц пока справа свободно
        if free(-1, 0):  # если сверху свободно то закрасить все
            painted.add(tuple(robot))
        right()
    if free(-1, 0):
        painted.add(tuple(robot))

    assert painted == {(0, c) for c in gaps}, f'проходы {gaps}: закрашено не то'
    return len(painted)


for k in range(6):  # все варианты стены из 6 клеток, над Роботом проход не бывает
    for gaps in combinations(range(1, 6), k):
        run(6, set(gaps))
print(run(13, {3, 6, 10}))  # поле с рисунка

Ответ: 3

Робот идёт вправо, пока справа свободно, и в каждой клетке проверяет, есть ли над ним проход. У вертикальной стены цикл заканчивается, поэтому последнюю клетку проверяют отдельно после цикла: без этой проверки проход над последней клеткой остался бы незакрашенным. Проверка на Python запускает алгоритм на всех вариантах стены длиной 6 клеток с проходами в любых местах, кроме клетки над Роботом, и для поля с рисунка печатает число закрашенных клеток — 3.

Типичные ошибки

Потренироваться на тренажёре

Частые вопросы

В какой программе делать задание 15 ОГЭ по информатике?

В учебной среде исполнителя «Робот», например в «Кумире». Если такой среды на экзамене нет, алгоритм записывают в простом текстовом редакторе и сохраняют в файл формата .txt.

Сколько баллов дают за задание 15 ОГЭ?

До 2 баллов. По критериям демоверсии 2 балла ставят, если алгоритм правильно работает при всех допустимых исходных данных. 1 балл — если алгоритм завершается, Робот не разбивается, лишних закрашенных клеток не больше 10 и незакрашенных нужных не больше 10.

Можно ли писать «справа стена» вместо «не справа свободно»?

Да. Критерии демоверсии разрешают другой синтаксис команд, более привычный ученику, в том числе «справа стена» вместо «не справа свободно». Отдельные синтаксические ошибки, не искажающие замысла решения, тоже допускаются.

Официальные материалы

Другие задания

Все задания и структура экзамена — на странице ОГЭ по информатике. Соседние разборы: задание 14 и задание 16.

Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.