Задание 2 ОГЭ по информатике: шифр из символов и цифр

Подтемы

Что проверяет задание

Задание 2 проверяет умение работать с таблицей соответствия «буква — код» и восстанавливать по ней исходное сообщение. Код может состоять из специальных символов (@, ~, +, #, ^ и т.п.) или из цифр — принцип решения одинаковый: нужно понять устройство соответствия и правильно «нарезать» зашифрованную строку на части, каждая из которых равна одному коду из таблицы.

Проверяются три навыка:

  1. умение читать и применять таблицу кодирования;
  2. умение работать с кодами разной длины (одна буква кодируется одним символом, другая — двумя);
  3. логика — использование дополнительного условия задачи (например, «буквы в сообщении не повторяются») для снятия неоднозначности при разбиении строки.

Как выглядит формулировка и сколько баллов

Типичная формулировка: «Дан фрагмент кодовой таблицы: буквы и соответствующие им коды. Известно, что буквы в закодированном слове не повторяются. Расшифруйте сообщение». Иногда встречается обратная задача — закодировать слово по таблице.

В таблице сверху обычно идёт строка букв, под ней (или сразу за ней без разделителей) — строка кодов. Коды состоят из одного и того же небольшого набора символов (обычно 2–3 знака) или цифр, а их длина может отличаться от буквы к букве.

Задание относится к базовому уровню, оценивается в 1 первичный балл, ответ — слово (без пробелов, обычно заглавными буквами), калькулятор не требуется.

Что нужно знать

  • Таблица кодирования — взаимно однозначное соответствие между буквами алфавита и кодовыми словами (кодами). Каждой букве соответствует ровно один код, разным буквам — разные коды.
  • Код переменной длины (префиксный код) — способ кодирования, при котором длины кодов различны, но никакой код не является началом (префиксом) другого. Это гарантирует однозначность разбора строки слева направо.
  • Если алфавит кода состоит из nn различных символов, то количество различных кодов длины kk равно nkn^k. Например, при n=3n=3 и k=2k=2 получаем 32=93^2=9 возможных двухсимвольных кодов.
  • Для префиксного кода из mm слов с длинами l1,l2,…,lml_1, l_2, \dots, l_m над алфавитом из nn символов должно выполняться неравенство Крафта: ∑i=1mn−li≤1.\sum_{i=1}^{m} n^{-l_i} \le 1.
  • Полезный практический приём: если известна общая длина строки кодов LL и число букв mm, то из L=∑liL=\sum l_i можно определить, сколько кодов какой длины использовано (например, при m=6m=6 и L=11L=11 получаем один код длины 1 и пять кодов длины 2, так как 1+2×5=111+2\times5=11).
  • Числовой шифр работает по тем же правилам: коды — это цифры или группы цифр, а условие «нет повторов» также помогает разбить длинную цифровую строку на отдельные коды.

Методы решения

1. Коды одинаковой длины. Если все коды в таблице состоят из одинакового числа символов (например, все по 2 знака), достаточно разбить зашифрованную строку на группы такой же длины и заменить каждую группу буквой по таблице. Мини-пример: таблица А=01, Б=10, В=11; строка 011011 → 01|10|11 → АБВ.

2. Коды переменной длины (метод перебора по таблице). Если длины кодов разные, читаем строку слева направо и на каждом шаге проверяем, совпадает ли следующий 1 символ, 2 символа и т.д. с каким-либо кодом из таблицы. Если код найден и является единственно возможным (не является префиксом другого кода), фиксируем букву и двигаемся дальше. Мини-пример: А=0, Б=10, В=11; строка 010 → «0»=А, «10»=Б → АБ.

3. Разрешение неоднозначности через условие «буквы не повторяются». Если на каком-то шаге код можно прочитать двумя способами, а один из вариантов приводит к повтору буквы (что запрещено условием), выбираем второй вариант. Мини-пример: если код Х короче кода Y, но Y начинается так же, как X, — если по варианту с X буква X уже встретилась раньше, выбираем разбор через Y.

4. Работа с цифровым шифром. Принцип тот же, но код — цифра или число. Нужно определить, кодируются ли буквы одной цифрой или парами цифр, посчитав общее количество цифр в строке кодов и число букв в таблице. Мини-пример: А=1, Б=23, В=4; строка 1234 → 1|23|4 → АБВ.

5. Обратная задача — кодирование. Если нужно зашифровать слово по таблице, просто заменяем каждую букву соответствующим кодом и записываем коды подряд без пробелов, в том порядке, в котором идут буквы слова.

Алгоритм решения по шагам

  1. Определите алфавит кода: сколько разных символов (или цифр) встречается в строке кодов.
  2. Посчитайте число букв mm в таблице и общую длину строки кодов LL. Найдите распределение длин кодов из равенства L=∑liL=\sum l_i (обычно это один короткий код и остальные — на 1 символ длиннее).
  3. Восстановите таблицу «буква → код», сопоставляя буквы по порядку с кусками строки кодов нужной длины. Проверьте, что все коды получились разными (биекция).
  4. Возьмите зашифрованное сообщение и начните читать его слева направо, на каждом шаге пробуя короткие коды первыми.
  5. Если разбор неоднозначен — используйте условие «буквы не повторяются»: отбрасывайте вариант, который даёт уже использованную букву.
  6. Соберите буквы в слово, проверьте, что получилось осмысленное русское слово.
  7. Запишите ответ заглавными буквами без пробелов и знаков.

Разбор примеров

Пример 1. Таблица: буквы К, Л, М, П, О, И; коды над алфавитом из символов @, +, ~:

Буква К Л М П О И
Код @@ ~ @+ @~ +@ +~

Здесь 6 букв, суммарная длина кодов 1+2×5=111+2\times5=11, то есть один код (у буквы Л) состоит из одного символа, остальные — из двух. Ни один код длины 2 не начинается с «~», поэтому расшифровка однозначна.

Зашифрованная строка: +@~+~@+@~. Разбираем слева направо:

  • +@ → О;
  • ~ → Л;
  • +~ → И;
  • @+ → М;
  • @~ → П.

Получаем ОЛИМП.

Пример 2. Буквы Н, М, Л, И, Т, О; алфавит символов *, @, ~:

Буква Н М Л И Т О
Код @~ @* *@ ~ *~ @@

Сумма длин: 1+2×5=111+2\times5=11 — короткий код у буквы И.

Зашифрованная строка: *@~@*@@@~. Разбор:

  • *@ → Л;
  • ~ → И;
  • @* → М;
  • @@ → О;
  • @~ → Н.

Получаем ЛИМОН.

Пример 3. Буквы Ж, Е, С, А, К, Л; алфавит символов +, #, ^:

Буква Ж Е С А К Л
Код ++ ^ #+ +^ #^ +#

Сумма длин: 1+2×5=111+2\times5=11, короткий код у буквы Е.

Зашифрованная строка: +#^#+#^+^. Разбор:

  • +# → Л;
  • ^ → Е;
  • #+ → С;
  • #^ → К;
  • +^ → А.

Получаем ЛЕСКА.

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

Типичные ошибки и ловушки

  • Считать, что все коды одинаковой длины, не проверив это через сопоставление общей длины строки кодов и числа букв — приводит к сдвигу и полной путанице в расшифровке.
  • Путать похожие символы (например, ~ и +, или @ и &) при переносе таблицы и сообщения — из-за этого код читается неверно уже с первого шага.
  • Забывать про биекцию: если в восстановленной таблице у двух разных букв получился одинаковый код — где-то ошибка в разбиении, нужно пересчитать длины.
  • Игнорировать условие «буквы не повторяются», хотя оно часто единственный способ выбрать между двумя формально возможными разборами строки.
  • Ошибка в подсчёте символов при разбиении длинной строки — сбивается всё разбиение начиная с этого места; лучше подписывать номера позиций карандашом.
  • Неправильный регистр или пробелы в ответе — ответ обычно нужно записать одним словом заглавными буквами без пробелов и знаков препинания.
  • Не проверять итоговое слово по смыслу — если получилась бессмысленная последовательность букв, значит, где-то допущена ошибка в разборе.

Как готовиться

  • Решите подряд 10–15 задач этого типа из открытого банка заданий — символьные и цифровые варианты вперемешку, чтобы не привыкать к одному формату.
  • Тренируйтесь быстро считать общую длину строки кодов и число букв, чтобы сразу понимать, сколько кодов какой длины использовано — это экономит время на экзамене.
  • Отдельно потренируйтесь на примерах, где условие «буквы не повторяются» действительно нужно для разбора — это самая частая ловушка.
  • После расшифровки всегда проверяйте, что получилось настоящее русское слово; если нет — ищите ошибку в разбиении строки, а не пытайтесь "подогнать" смысл.
  • Порешайте и обратные задачи (закодировать слово по таблице) — они помогают лучше понять структуру соответствия и требуют меньше времени, но часто встречаются в вариантах.
  • Работайте без калькулятора и таймера в конце подготовки, чтобы привыкнуть к формату реального экзамена — задание должно занимать не больше 2–3 минут.

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

Как понять, что коды в таблице разной длины?

Посчитайте общее число символов в строке кодов и число букв в таблице. Если частное не целое или сумма не делится равными частями, значит длины разные — обычно один код короче остальных на 1 символ.

Что делать, если строку можно разбить двумя разными способами?

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

Отличается ли решение для цифрового шифра от символьного?

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

Нужно ли писать ответ заглавными буквами?

Да, ответ обычно записывается одним словом заглавными русскими буквами без пробелов и знаков препинания, если в условии не указано иначе.

Как проверить, что расшифровка верна?

Убедитесь, что получившееся слово существует и осмысленно, а также что все использованные коды в таблице действительно разные и совпадают по длине с посчитанным ранее распределением.

Можно ли встретить в задании код длиной больше двух символов?

Да, но в подавляющем большинстве заданий ОГЭ длины кодов ограничены 1–2 символами; принцип разбора при этом не меняется — просто добавляется проверка более длинных вариантов.

Сколько времени стоит тратить на это задание на экзамене?

Обычно 2–3 минуты достаточно, если заранее потренироваться считать длины кодов и быстро сверяться с таблицей.