Задание 2 ОГЭ по информатике: как расшифровать сообщение по кодовой таблице
Задание 2 ОГЭ по информатике даёт кодовую таблицу и зашифрованное сообщение из нулей и единиц или из значков. Нужно разбить сообщение на коды букв и записать получившееся слово. Разбор идёт слева направо: на каждом шаге вы пробуете коды, с которых может начинаться остаток строки.
- Что проверяет: Умение декодировать кодовую последовательность: кодирование символов одного алфавита кодовыми словами другого алфавита, равномерный и неравномерный код (по проекту спецификации 2027 года). Базовый уровень.
- Баллы: 1 первичный балл
- Формат ответа: Слово или набор букв без пробелов и запятых.
- Программа: задание решают без программы, ответ можно проверить на Python
- Уровень сложности: базовый
- Время: около 4 минут по спецификации
- Кодификатор: 2.1 — кодирование символов одного алфавита с помощью кодовых слов в другом алфавите, кодовая таблица, декодирование; 2.1 — декодирование сообщений с использованием равномерного и неравномерного кода
Как решать
Перепишите кодовую таблицу на черновик и держите сообщение перед глазами. Разбор всегда начинают с первого символа сообщения.
Шаг 1. Найдите в таблице все коды, с которых может начинаться сообщение. Если такой код один, запишите его букву и отрежьте код от сообщения.
Шаг 2. Если подходят два кода (например, «~» и «~#»), проверьте оба варианта. Для каждого посмотрите, может ли продолжиться разбор остатка. Вариант, который через шаг-два упирается в символы, с которых не начинается ни один код, — тупиковый, его отбрасывают.
Шаг 3. Повторяйте, пока сообщение не закончится. Если строка разобралась до конца без остатка, слово найдено.
Если ни один код в таблице не является началом другого (так бывает с двоичными кодами вроде 00, 010, 011), разбор идёт без ветвлений: на каждом шаге подходит ровно один код. Это условие Фано, и в таких заданиях вариант всегда единственный.
В конце сложите коды найденных букв обратно и сравните с сообщением символ за символом: так ловится пропущенный или лишний знак.
Примеры с решением
Пример 1
Для кодирования букв К, О, Т, Л, А, С используются двоичные коды:
А 01
К 000
Л 001
О 10
С 110
Т 111
Расшифруйте сообщение 1101000010001. Получившееся слово запишите в качестве ответа.
Проверка ответа на Python
# Задание 2 ОГЭ, пример 1: расшифровка сообщения перебором всех разбиений
codes = {"А": "01", "К": "000", "Л": "001", "О": "10", "С": "110", "Т": "111"}
message = "1101000010001"
def decode(rest):
"""Все способы разбить остаток сообщения на коды букв."""
if not rest:
return [""]
out = []
for letter, code in codes.items():
if rest.startswith(code):
out += [letter + tail for tail in decode(rest[len(code):])]
return out
variants = decode(message)
print(variants[0] if len(variants) == 1 else variants)Ответ: СОКОЛ
Ни один код здесь не начинается с другого, поэтому ветвлений нет. 110 — С, остаётся 1000010001; 10 — О, остаётся 00010001; 000 — К, остаётся 10001; 10 — О, остаётся 001; 001 — Л. Получилось СОКОЛ. Проверка: 110 + 10 + 000 + 10 + 001 = 1101000010001.
Пример 2
Коля и Настя придумали шифр из значков. Кодовая таблица:
А ~
Б #+
В +~
Г ~#
Д #~
Е +#
Расшифруйте сообщение ~##~+#. Получившееся слово (набор букв) запишите в качестве ответа.
Проверка ответа на Python
# Задание 2 ОГЭ, пример 2: расшифровка сообщения перебором всех разбиений
codes = {"А": "~", "Б": "#+", "В": "+~", "Г": "~#", "Д": "#~", "Е": "+#"}
message = "~##~+#"
def decode(rest):
"""Все способы разбить остаток сообщения на коды букв."""
if not rest:
return [""]
out = []
for letter, code in codes.items():
if rest.startswith(code):
out += [letter + tail for tail in decode(rest[len(code):])]
return out
variants = decode(message)
print(variants[0] if len(variants) == 1 else variants)Ответ: ГДЕ
Сообщение начинается с «~», и подходят два кода: А (~) и Г (~#). Вариант А оставляет «##~+#», а с «##» не начинается ни один код: тупик. Вариант Г оставляет «#~+#»: подходит только Д (#~), остаётся «+#» — это Е. Ответ ГДЕ.
Типичные ошибки
- Берут первый подходящий короткий код и не проверяют, можно ли продолжить разбор. Короткий код часто ведёт в тупик.
- Разбирают сообщение с конца или с середины. Надёжный способ — всегда с начала.
- Не делают обратную проверку и теряют символ при переписывании длинной строки.
- Ищут осмысленное слово и подгоняют разбор под него. В условии прямо сказано, что ответом может быть набор букв.
Потренироваться на тренажёре
- Задачи на строки на Python: срезы, поиск подстроки
- Перебор с возвратом на Python: как проверять все варианты разбора
Частые вопросы
Должно ли получиться настоящее слово?
Нет. В условии задания 2 так и написано: «слово (набор букв)». Ответом может быть бессмысленное сочетание букв, если оно однозначно получается из сообщения.
Что делать, если сообщение разбирается двумя способами?
Проверьте каждый вариант до конца строки. Обычно один из них упирается в символы, которые не начинают ни один код. Если оба разбора дошли до конца, перепроверьте, правильно ли вы переписали сообщение и таблицу.
Что такое условие Фано?
Это правило: ни одно кодовое слово не совпадает с началом другого. Если оно выполнено, сообщение расшифровывается однозначно и без перебора вариантов.
Официальные материалы
- Демоверсия, спецификация и кодификатор ОГЭ 2027 по информатике (архив, проект)
- Открытый банк заданий ОГЭ
Другие задания
Все задания и структура экзамена — на странице ОГЭ по информатике. Соседние разборы: задание 1 и задание 3.
Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.