От разведчика было получено сообщение:
00100001000001110
В этом сообщении зашифрован пароль – последовательность русских букв. Каждая буква пароля кодировалась двоичным словом по таблице.
Расшифруйте сообщение. Запишите в ответе пароль.
БЕСЕДА
Для заданных в таблице кодов символов проверяем выполнение условий Фано. Т.к. на 10 (кодовое слово для буквы А), а также на 11 (кодовое слово для буквы Ж) не начинаются более длинные кодовые слова (состоящие из трех цифр), то, в нашем случае, выполняется прямое условие Фано, а значит сообщение нужно расшифровывать слева направо. Кодовые слова состоят из двух или трёх цифр. Возьмём первые две цифры: 00, такого кодового слова в нашей таблице нет, значит берём первые три цифры: 001 – это кодовое слово для буквы Б. Возьмём следующие две цифры, идущие после кодового слова для буквы Б, это снова 00. Т.к. такого кодового слова в нашей таблице нет, берём три цифры: 000 – это кодовое слово для буквы Е. Возьмём две цифры, идущие после кодового слова для буквы Е, это - 01. Т.к. такого кодового слова в нашей таблице нет, берём три цифры: 010 – это кодовое слово для буквы С. Возьмём две цифры, идущие после кодового слова для буквы С, это - 00. Т.к. такого кодового слова в нашей таблице нет, берём три цифры: 000 – это кодовое слово для буквы Е. Возьмём две цифры, идущие после кодового слова для второй буквы Е, это - 01. Т.к. такого кодового слова в нашей таблице нет, берём три цифры: 011 – это кодовое слово для буквы Д. Оставшееся кодовое слово 10 соответствует букве А. Таким образом, в результате расшифровки, получаем 001 000 010 000 011 10, т.е слово БЕСЕДА.
Решение на Python:
d = {'А': '10', 'Б': '001', 'Д': '011', 'Е': '000', 'С': '010', 'Ж': '11'} s = '00100001000001110' def f(kod, ans): if kod == s: print(ans); return if len(kod) > len(s): return for c in d: f(kod + d[c], ans + c) f('', '')
От разведчика было получено сообщение:
00010001010011001
В этом сообщении зашифрован пароль – последовательность русских букв. Каждая буква пароля кодировалась двоичным словом по таблице.
Расшифруйте сообщение. Запишите в ответе пароль.
ДЕПЕША
Для заданных в таблице кодов символов проверяем выполнение условий Фано. Т.к. на 01 (кодовое слово для буквы А), а также на 11 (кодовое слово для буквы В) начинаются более длинные кодовые слова (состоящие из трех цифр) букв П и Ш, то, в нашем случае, прямое условие Фано НЕ ВЫПОЛНЯЕТСЯ. Проверим выполнения обратного условия Фано, на 01 и 11 не заканчивается ни одно более длинное кодовое слово, а значит обратное условие Фано ВЫПОЛНЯЕТСЯ и сообщение нужно расшифровывать справа налево. Кодовые слова состоят из двух или трёх цифр. Возьмём последние две цифры: 01 – это кодовое слово для буквы А. Возьмём следующие две цифры, идущие перед кодовым словом для буквы А, это - 10. Т.к. такого кодового слова в нашей таблице нет, берём три цифры: 110 – это кодовое слово для буквы Ш. Возьмём две цифры, идущие перед кодовым словом для буквы Ш, это - 00. Т.к. такого кодового слова в нашей таблице нет, берём три цифры: 100 – это кодовое слово для буквы Е. Возьмём две цифры, идущие перед кодовым словом для буквы Е, это - 10. Т.к. такого кодового слова в нашей таблице нет, берём три цифры: 010 – это кодовое слово для буквы П. Возьмём две цифры, идущие перед кодовым словом для буквы П, это - 00. Т.к. такого кодового слова в нашей таблице нет, берём три цифры: 100 – это снова кодовое слово для буквы Е. Оставшееся кодовое слово 000 соответствует букве Д. Таким образом, в результате расшифровки, получаем 000 100 010 100 110 01, т.е слово ДЕПЕША (расшифрованные буквы читаем слева направо!).
Решение на Python:
d = {'А': '01', 'В': '11', 'Д': '000', 'Е': '100', 'П': '010', 'Ш': '110'} s = '00010001010011001' def f(kod, ans): if kod == s: print(ans); return if len(kod) > len(s): return for c in d: f(kod + d[c], ans + c) f('', '')
Вася и Петя играли в шпионов и кодировали сообщения собственным шифром. Фрагмент кодовой таблицы приведен ниже:
Расшифруйте сообщение, если известно, что буквы в нем не повторяются:
+ ~ + ~ + @ @ ~ +
Запишите в ответе расшифрованное сообщение.
ОЛИМП

Решение на Python:
d = {'К': '@+', 'Л': '~+', 'М': '+@', 'П': '@~+', 'О': '+', 'И': '~'} s = '+~+~+@@~+' def f(kod, ans): if kod == s and len(ans) == len(set(ans)): print(ans); return if len(kod) > len(s): return for c in d: f(kod + d[c], ans + c) f('', '')
От разведчика была получена следующая шифрованная радиограмма, переданная с использованием азбуки Морзе:
––•–––––•••–––•–•–
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в радиограмме использовались только следующие буквы:
Расшифруйте радиограмму. Запишите в ответе расшифрованную радиограмму.
МАМГЮКА

Решение на Python:
d = {'А': '*-', 'Г': '--*', 'М': '--', 'К': '-*-', 'Ю': '**--'} s = '--*-----***---*-*-' def f(kod, ans): if kod == s: print(ans); return if len(kod) > len(s): return for c in d: f(kod + d[c], ans + c) f('', '')
Сообщение было зашифровано кодом. Использовались только буквы, приведенные в таблице:
Определите, какие буквы в сообщении повторяются, и запишите их в ответе в алфавитном порядке.
...o..o.oo...o..oooo.o.oo
ДЕ
Буквы в таблице закодированы кодом постоянной длины (5 символов). Разобьём сообщение по 5 символов и сопоставим коды с таблицей: ...o.|.o.oo|...o.|.oooo|.o.oo Д Е Д Г Е Повторяются буквы Д и Е. Запишем их в ответе в алфавитном порядке: ДЕ
Решение на Python:
d = {'А':'..o..','Б':'.o..o','В':'.oo.o','Г':'.oooo','Д':'...o.', Е':'.o.oo'} s = '...o..o.oo...o..oooo.o.oo' def f(kod, ans): if kod == s: print(ans); return if len(kod) > len(s): return for c in d: f(kod + d[c], ans + c) f('', '')
Валя шифрует русские слова (последовательности букв), записывая вместо каждой буквы ее код:
Некоторые цепочки можно расшифровать не одним способом. Например, 00010101 может означать не только СКА, но и СНК. Даны три кодовые цепочки:
1010110
11110001
100000101
Найдите среди них ту, которая имеет только одну расшифровку, и запишите в ответе расшифрованное слово.
ОДА
Проанализируем каждый вариант ответа: 1) «1010110» может означать как «НКН» так и «КАН». 2) «11110001» может означать только «ОДА». 3) «100000101» может означать как «ДСК» так и «НСАА».
Решение на Python:
d = {'А': '01', 'Д': '100', 'К': '101', 'Н': '10', 'О': '111', 'С': '000'} def f(kod, ans): if kod == s: print(ans); return if len(kod) > len(s): return for c in d: f(kod + d[c], ans + c) print('1-я цепочка') s = '1010110' f('', '') print('\n2-я цепочка') s = '11110001' f('', '') print('\n3-я цепочка') s = '100000101' f('', '')
Ваня шифрует русские слова, записывая вместо каждой буквы ее номер в алфавите (без пробелов). Номера букв даны в таблице:
Некоторые шифровки можно расшифровать несколькими способами. Например, 311333 может означать «ВАЛЯ», может — «ЭЛЯ», а может — «ВААВВВ». Даны четыре шифровки:
3135420
2102030
1331320
2033510
Только одна из них расшифровывается единственным способом. Найдите ее и расшифруйте. Получившееся слово запишите в качестве ответа.
БИТЬ
Проанализируем каждый вариант ответа: 1) «3135420» может означать как «ВЛДГТ» так и «ВАВДГТ». 2) «2102030» может означать только «БИТЬ». 3) «1331320» может означать как «ЛЭВТ» так и «АВЭВТ». 4) «2033510» может означать как «ТЯДИ» так и «ТВВДИ». Следовательно, ответ «БИТЬ»
Решение на Python:
alph = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' d = {alph[i]: str(i+1) for i in range(len(alph))} def f(kod, ans): if kod == s: print(ans); return if len(kod) > len(s) or len(kod) > 0 and kod[0] != s[0]: return for c in d: f(kod + d[c], ans + c) print('1-я цепочка') s = '3135420' f('', '') print('\n2-я цепочка') s = '2102030' f('', '') print('\n3-я цепочка') s = '1331320' f('', '') print('\n4-я цепочка') s = '2033510' f('', '')
Мальчики играли в шпионов и закодировали сообщение придуманным шифром. В сообщении присутствуют только буквы из приведенного фрагмента кодовой таблицы:
Определите, сколько букв содержит сообщение:
101212210102
5
Сопоставляя символы их кодам, расшифруем сообщение: 101212210102 = АВДАГ Следовательно, ответ 5.
Решение на Python:
d = {'А':'10','Б':'101','В':'12','Г':'102','Д':'122','Е':'22','Ж': '120'} s = '101212210102' def f(kod, ans): if kod == s: print(len(ans)); return if len(kod) > len(s): return for c in d: f(kod + d[c], ans + c) f('', '')
Апробация-2025
Сообщение зашифровано кодом. Используются только буквы, приведённые в таблице:
Определите, какие буквы в сообщении повторяются, и запишите их в ответе без пробелов в алфавитном порядке.
011101001110001011101001101001
НТ
В данной задаче используется равномерное кодирование: все символы закодированы пятью цифрами. Разбиваем сообщение по пять цифр и декодируем.
Апробация-2025
Сообщение зашифровано кодом. Используются только буквы, приведённые в таблице:
Определите, какие буквы в сообщении повторяются, и запишите их в ответе без пробелов в алфавитном порядке.
10011010011001110001010010110101110
ИТ
В данной задаче используется равномерное кодирование: все символы закодированы пятью цифрами. Разбиваем сообщение по пять цифр и декодируем. Решение аналогично решению предыдущей задачи № 9.