Сообщение записано кодами букв без разделителей. Коды разной длины, поэтому разбить цепочку на буквы нужно аккуратно: только одно разбиение даёт расшифровку до конца.
Что нужно знать
Коды букв бывают разной длины, разделителей между буквами нет.
Код одной буквы может быть началом кода другой — тогда возможны тупики.
Как решать
Читаем сообщение слева направо.
Выписываем буквы, чей код совпадает с началом остатка.
Если вариантов несколько, пробуем каждый: неверный быстро заводит в тупик.
Типичные ошибки
Взять самый короткий код и не проверить, что остаток расшифровывается.
Пропустить символ при переписывании длинной цепочки — лучше отмечать прочитанное.
Разобранные варианты
Сначала реши сам, потом открой разбор. В разборе — пошаговая расшифровка и программа на Python.
Вариант 1
азбука из точек и тире
Разведчик передал в штаб радиограмму:
– • – – – • – – – – – – • – – – •
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в ней использовались только следующие буквы.
Д
Ж
Р
Ф
Ч
• – – –
– – – •
• – –
– • –
– –
Определите текст радиограммы. В ответе запишите получившееся слово (набор букв).
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток • – – – – – – • – – – •: подходят Д (• – – –), Р (• – –). Если взять Р, остаток дальше не расшифровывается — тупик. Остаётся Д.
Остаток – – – • – – – •: подходят Ж (– – – •), Ч (– –). Если взять Ч, остаток дальше не расшифровывается — тупик. Остаётся Ж.
Остаток – – – •: подходят Ж (– – – •), Ч (– –). Если взять Ч, остаток дальше не расшифровывается — тупик. Остаётся Ж.
Ответ: ФЧДЖЖ
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'Д': '•–––', 'Ж': '–––•', 'Р': '•––', 'Ф': '–•–', 'Ч': '––'}
msg = '–•–––•––––––•–––•'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Вариант 2
азбука из точек и тире
Разведчик передал в штаб радиограмму:
– – • – – – • – – • • – • • • • – – • –
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в ней использовались только следующие буквы.
А
Е
Ж
С
Э
– • • –
– – –
• • • –
– – • –
• •
Определите текст радиограммы. В ответе запишите получившееся слово (набор букв).
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток – • • – • • • • – – • –: подходит только А (– • • –).
Остаток • • • • – – • –: подходит только Э (• •).
Остаток • • – – • –: подходит только Э (• •).
Остаток – – • –: подходит только С (– – • –).
Ответ: ССАЭЭС
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'А': '–••–', 'Е': '–––', 'Ж': '•••–', 'С': '––•–', 'Э': '••'}
msg = '––•–––•––••–••••––•–'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Вариант 3
азбука из точек и тире
Разведчик передал в штаб радиограмму:
• • – – • • – • – – – • • – – – • – • – • • –
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в ней использовались только следующие буквы.
М
О
Ф
Ч
Я
• • – –
• • –
• – – –
– • –
• –
Определите текст радиограммы. В ответе запишите получившееся слово (набор букв).
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток • • – – • • – • – – – • • – – – • – • – • • –: подходят М (• • – –), О (• • –). Если взять О, остаток дальше не расшифровывается — тупик. Остаётся М.
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'М': '••––', 'О': '••–', 'Ф': '•–––', 'Ч': '–•–', 'Я': '•–'}
msg = '••––••–•–––••–––•–•–••–'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Вариант 4
азбука из точек и тире
Разведчик передал в штаб радиограмму:
• • – • – • • – • – • • • – – – – – •
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в ней использовались только следующие буквы.
Л
С
Т
Х
Э
• •
• • – –
• – • –
– – – •
•
Определите текст радиограммы. В ответе запишите получившееся слово (набор букв).
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток • • – • – • • – • – • • • – – – – – •: подходят Л (• •), Э (•). Если взять Л, остаток дальше не расшифровывается — тупик. Остаётся Э.
Остаток • – • – • • – • – • • • – – – – – •: подходят Т (• – • –), Э (•). Если взять Э, остаток дальше не расшифровывается — тупик. Остаётся Т.
Остаток • • – • – • • • – – – – – •: подходят Л (• •), Э (•). Если взять Л, остаток дальше не расшифровывается — тупик. Остаётся Э.
Остаток • – • – • • • – – – – – •: подходят Т (• – • –), Э (•). Если взять Э, остаток дальше не расшифровывается — тупик. Остаётся Т.
Остаток • • • – – – – – •: подходят Л (• •), Э (•). Если взять Л, остаток дальше не расшифровывается — тупик. Остаётся Э.
Остаток • • – – – – – •: подходят Л (• •), С (• • – –), Э (•). Если взять Л, Э, остаток дальше не расшифровывается — тупик. Остаётся С.
Остаток – – – •: подходит только Х (– – – •).
Ответ: ЭТЭТЭСХ
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'Л': '••', 'С': '••––', 'Т': '•–•–', 'Х': '–––•', 'Э': '•'}
msg = '••–•–••–•–•••–––––•'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Вариант 5
азбука из точек и тире
Разведчик передал в штаб радиограмму:
• – • – • – – • – • – – • • • – – • • – – •
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в ней использовались только следующие буквы.
Г
Е
Т
Ф
Х
– • •
• • •
•
• – – •
– • –
Определите текст радиограммы. В ответе запишите получившееся слово (набор букв).
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток – • • • – – • • – – •: подходит только Г (– • •).
Остаток • – – • • – – •: подходят Т (•), Ф (• – – •). Если взять Т, остаток дальше не расшифровывается — тупик. Остаётся Ф.
Остаток • – – •: подходят Т (•), Ф (• – – •). Если взять Т, остаток дальше не расшифровывается — тупик. Остаётся Ф.
Ответ: ТХФХГФФ
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'Г': '–••', 'Е': '•••', 'Т': '•', 'Ф': '•––•', 'Х': '–•–'}
msg = '•–•–•––•–•––•••––••––•'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Вариант 6
азбука из точек и тире
Разведчик передал в штаб радиограмму:
– • – • • • – • – • – – – – • – –
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в ней использовались только следующие буквы.
Б
Д
Е
Р
Я
• •
– • – –
– –
• – •
– • –
Определите текст радиограммы. В ответе запишите получившееся слово (набор букв).
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток • • • – • – • – – – – • – –: подходит только Б (• •).
Остаток • – • – • – – – – • – –: подходит только Р (• – •).
Остаток – • – – – – • – –: подходят Д (– • – –), Я (– • –). Если взять Д, остаток дальше не расшифровывается — тупик. Остаётся Я.
Остаток – – – • – –: подходит только Е (– –).
Остаток – • – –: подходят Д (– • – –), Я (– • –). Если взять Я, остаток дальше не расшифровывается — тупик. Остаётся Д.
Ответ: ЯБРЯЕД
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'Б': '••', 'Д': '–•––', 'Е': '––', 'Р': '•–•', 'Я': '–•–'}
msg = '–•–•••–•–•––––•––'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Вариант 7
цифровой код
Валя шифрует слова, записывая вместо каждой буквы её код. Коды букв даны в таблице.
Д
И
К
О
Т
00
11
01
100
001
Некоторые цепочки можно расшифровать не одним способом. Вале прислали шифровку: 000001100001001. Известно, что она расшифровывается единственным образом. Запишите в ответе расшифрованное слово.
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток 000001100001001: подходит только Д (00).
Остаток 0001100001001: подходит только Д (00).
Остаток 01100001001: подходит только К (01).
Остаток 100001001: подходит только О (100).
Остаток 001001: подходят Д (00), Т (001). Если взять Д, остаток дальше не расшифровывается — тупик. Остаётся Т.
Остаток 001: подходят Д (00), Т (001). Если взять Д, остаток дальше не расшифровывается — тупик. Остаётся Т.
Ответ: ДДКОТТ
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'Д': '00', 'И': '11', 'К': '01', 'О': '100', 'Т': '001'}
msg = '000001100001001'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Вариант 8
цифровой код
Валя шифрует слова, записывая вместо каждой буквы её код. Коды букв даны в таблице.
Д
Л
С
У
Ш
0
10
100
20
011
Некоторые цепочки можно расшифровать не одним способом. Вале прислали шифровку: 100112020011011. Известно, что она расшифровывается единственным образом. Запишите в ответе расшифрованное слово.
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток 100112020011011: подходят Л (10), С (100). Если взять С, остаток дальше не расшифровывается — тупик. Остаётся Л.
Остаток 0112020011011: подходят Д (0), Ш (011). Если взять Д, остаток дальше не расшифровывается — тупик. Остаётся Ш.
Остаток 2020011011: подходит только У (20).
Остаток 20011011: подходит только У (20).
Остаток 011011: подходят Д (0), Ш (011). Если взять Д, остаток дальше не расшифровывается — тупик. Остаётся Ш.
Остаток 011: подходят Д (0), Ш (011). Если взять Д, остаток дальше не расшифровывается — тупик. Остаётся Ш.
Ответ: ЛШУУШШ
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'Д': '0', 'Л': '10', 'С': '100', 'У': '20', 'Ш': '011'}
msg = '100112020011011'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Вариант 9
цифровой код
Валя шифрует слова, записывая вместо каждой буквы её код. Коды букв даны в таблице.
Г
З
И
Л
Ф
1
001
110
100
011
Некоторые цепочки можно расшифровать не одним способом. Вале прислали шифровку: 01110010011010111. Известно, что она расшифровывается единственным образом. Запишите в ответе расшифрованное слово.
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток 01110010011010111: подходит только Ф (011).
Остаток 10010011010111: подходят Г (1), Л (100). Если взять Г, остаток дальше не расшифровывается — тупик. Остаётся Л.
Остаток 10011010111: подходят Г (1), Л (100). Если взять Г, остаток дальше не расшифровывается — тупик. Остаётся Л.
Остаток 11010111: подходят Г (1), И (110). Если взять Г, остаток дальше не расшифровывается — тупик. Остаётся И.
Остаток 10111: подходит только Г (1).
Остаток 0111: подходит только Ф (011).
Остаток 1: подходит только Г (1).
Ответ: ФЛЛИГФГ
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'Г': '1', 'З': '001', 'И': '110', 'Л': '100', 'Ф': '011'}
msg = '01110010011010111'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Вариант 10
цифровой код
Валя шифрует слова, записывая вместо каждой буквы её код. Коды букв даны в таблице.
Б
Т
У
Ц
Я
2
21
020
121
000
Некоторые цепочки можно расшифровать не одним способом. Вале прислали шифровку: 020000210202. Известно, что она расшифровывается единственным образом. Запишите в ответе расшифрованное слово.
Разбор
Идея. Коды разной длины и один код может быть началом другого, поэтому читать «на глаз» опасно. Идём слева направо: на каждом шаге смотрим, коды каких букв совпадают с началом остатка, и проверяем, расшифровывается ли то, что останется.
Остаток 020000210202: подходит только У (020).
Остаток 000210202: подходит только Я (000).
Остаток 210202: подходят Б (2), Т (21). Если взять Б, остаток дальше не расшифровывается — тупик. Остаётся Т.
Остаток 0202: подходит только У (020).
Остаток 2: подходит только Б (2).
Ответ: УЯТУБ
Решение на Python. Перебор с возвратом печатает все расшифровки — она одна.
codes = {'Б': '2', 'Т': '21', 'У': '020', 'Ц': '121', 'Я': '000'}
msg = '020000210202'
def decode(rest, word=''):
if rest == '':
print(word) # нашли расшифровку
return
for letter, c in codes.items():
if rest.startswith(c):
decode(rest[len(c):], word + letter)
decode(msg)
Для самостоятельного решения
Варианты 11–15 без разборов. Ответ можно проверить кнопкой.
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в ней использовались только следующие буквы.
А
Ж
Н
Ф
Э
• • •
– • •
– – • •
• • – –
– • • –
Определите текст радиограммы. В ответе запишите получившееся слово (набор букв).
Вариант 12
цифровой код
Валя шифрует слова, записывая вместо каждой буквы её код. Коды букв даны в таблице.
Ж
Л
Р
Х
Ц
00
101
102
221
001
Некоторые цепочки можно расшифровать не одним способом. Вале прислали шифровку: 00110200110210200. Известно, что она расшифровывается единственным образом. Запишите в ответе расшифрованное слово.
Вариант 13
азбука из точек и тире
Разведчик передал в штаб радиограмму:
• – – – – – – – • • – – – •
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в ней использовались только следующие буквы.
О
Ф
Ш
Э
Я
• –
– – – •
• •
– – –
• – • •
Определите текст радиограммы. В ответе запишите получившееся слово (набор букв).
Вариант 14
цифровой код
Валя шифрует слова, записывая вместо каждой буквы её код. Коды букв даны в таблице.
Б
О
Р
У
Э
00
110
101
1
001
Некоторые цепочки можно расшифровать не одним способом. Вале прислали шифровку: 10100110101101. Известно, что она расшифровывается единственным образом. Запишите в ответе расшифрованное слово.
Вариант 15
азбука из точек и тире
Разведчик передал в штаб радиограмму:
– • • – – – – – – – – • • • –
При передаче радиограммы было потеряно разбиение на буквы, но известно, что в ней использовались только следующие буквы.
Л
Р
У
Х
Я
• • –
•
– – – •
– • •
– – – –
Определите текст радиограммы. В ответе запишите получившееся слово (набор букв).