Судя по кириллице и размеру слов, текст был на русском языке, но шифр — новый. «Пожалуй, часа два у меня есть, раньше они не хватятся». Штирлиц любил разгадывать шифры. Частотную таблицу русских букв он помнил наизусть. Оставалось составить такую же таблицу для неизвестного текста и сравнить их. Сообщение получалось довольно странное.
О мядр щзщшпдкф юяфяспд.
— Люп впшпыкю?
— Нфпд.
— Пюлоьз.
— Пю шяыпфеьз.
— Тюп шзм дзьп?
— Чплпфзьз.
— Ьфр лпвп?
— Ьфр нэдз мпявп.
— 3 мдпвп фк ъыкнфзюх?
— Ьз ъоьпш пюзл ърюх
КФК чянюх: Упфхчя ямо дя наянюх: Пд о мядр ябя мзфядхлкг.
Увлекшись, Штирлиц забыл обо всем. В ключе не хватало всего трех букв, когда знакомый голос насмешливо произнес: «Игра окончена, полковник. Разведчик должен уметь проигрывать».
— Дениска, так нечестно! Мы же договорились до трех часов, а сейчас 2.30. Мне же совсем немного осталось!
— Эх, дедушка, как же ты не заметил, что я тебе в метро часы на полчаса назад подвел. А еще бывший разведчик! Ну ладно, ничья, а теперь пошли скорее, я обещал, что мы еще хлеб по дороге купим...».
— Так это что, не настоящий Штирлиц?! — возмутился Сережа. — А я-то уши развесил.
— Почему не настоящий, самый настоящий, только он уже на пенсии. Разве не может бывший разведчик поиграть после школы с внуком?
— Ну, допустим, а что за частотная таблица — я ничего не понял.
— Частотная таблица — один из самых важных инструментов шифровальщика. Возьми любую книгу и посчитай, сколько раз на какой-нибудь странице встречается буква «а», потом на другой странице, на третьей. Ты получишь примерно одинаковые числа. То же самое надо проделать с другими буквами алфавита. Можно посчитать, что любой русский текст состоит на 9,4% из букв «о», на 9% из «а» и так далее. Теперь возьми секретное послание. Мы предполагаем, что оно написано по-русски, перетасованным алфавитом. Посчитаем, какие буквы в нем встречаются и с какой частотой, сравним таблички и....
— Понял! — обрадовался Сережа.
— Только не думай, что все так просто, это ведь статистика, так можно угадать только самые часто встречающиеся буквы, так что тебе придется попотеть. А если остались еще какие-то неясности с частотной таблицей, посмотри рассказ Эдгара По «Золотой жук».
ОТ РЕДАКЦИИ.
Эту задачу мы предложили в письмах семи финалистам конкурса Чипа. Лучше всех справились Саша БАУРОВ и Карапет ОВИВЯН, они и получают калькуляторы фирм «Кассио» и «Электроника» на солнечных батарейках. Победитель шуточного конкурса Олеся МАТВЕЕВА — годовую подписку на «Пионер» 1989 года. А остальные пять претендентов на призовые места — грамоты журнала «Пионер».
Рекурсивный крокет
— Знаешь, Чип, ребята жалуются, что в последнее время наши игры стали скучнее. То ли дело, говорят, поющие поросята или 512 невест — было и смешно, и интересно. Что нам делать?
— А что тут поделаешь! Наверное, ребята правы: любая игра рано или поздно наскучит. Вот я скоро поеду путешествовать — тут уж будет о чем рассказать.
— Ну давай все-таки поиграем, ну хоть в крокет. Кстати вот уж где алгоритма не надо: гоняй себе шар по площадке, пока все ворота не пройдешь, только знай не промахнись.
Конечно, Сережа нарочно дразнил Чипа — ему очень нравилось, когда тот входил в азарт. И Чип попался на удочку.
— Это говорит программист?! Да ты что, не знаешь, что вся наша жизнь состоит из алгоритмов, не только твой дурацкий крокет? А что касается крокета, это частный случай знаменитой проблемы коммивояжера: как выбрать кратчайший маршрут через заданные точки. Для коммивояжера (бродячего торговца) это города на карте, для крокетиста — ворота на площадке.
— Ну и как выбрать этот маршрут?
— Самый короткий маршрут очень сложно выбирать, если я начну объяснять, мы с тобой последних читателей растеряем. Есть простой алгоритм выбора достаточно короткого маршрута без повторений и самопересечений. Уж так вышло, что этот алгоритм в стихах. Слушай:
— Ну как? — спросил Чип, как всегда, гордясь своим литературным упражнением.
— Да не очень... То есть стихи мне понравились, — спохватился Сережа, — только непонятно, что делать, когда будет много ворот. Вот когда одни ворота, тут все ясно: пройди их и катись в противоположный угол. Ну, когда трое ворот, тоже просто — дели площадку на три и по очереди проходи каждую...
— А ты понял, как именно проходить каждую из трех площадок? Ведь у каждой площадки есть по две диагонали, и мы их выбираем так, чтобы вместе получился зигзаг ADCB. Иначе пришлось бы делать лишнюю работу — перекатывать шар впустую из угла в угол.
— Ну, а если будет 9 ворот, тогда я, кажется, тоже понимаю, — подхватил Сережа. — Делю всю площадку на три по трое ворот и поочередно прохожу каждую своим маленьким зигзагом. А вместе получается большой зигзаг. Вот смотри, я его нарисовал. Ага, вот почему ты указываешь два угла: начальный и конечный — чтобы проходить площадку зигзагом, друг за другом: от A к D, от D к C, от C к B. А что ты будешь делать, если число ворот не делится на три?
— Тогда можно оставить в двух площадках поровну ворот, а в третьей — на одно или на два меньше Конечно, в конце концов мы дойдем до пустых площадок, но их, я полагаю, сможет пройти любой крокетист и без моих подсказок, пусть только идет по нужной диагонали. Но вообще-то ты прав — это упущение в программе, надо было написать про пустые площадки. Пусть ребята это условие впишут в нашу стихотворную программу.
Сереже очень понравился алгоритм рекурсивного крокета, и он его в своем кружке запрограммировал для настоящего компьютера. Посмотрите, как нарисовал компьютер крокетный маршрут через пятьдесят ворот. А какую программу напишете вы?
Чип и Сережа ждут, что вы пришлете свои программы и на конверте поставите девиз «Крокет».
ОТ РЕДАКЦИИ: