Помогите расшифровать текст методом частотного анализа
Необходимо расшифровать текст методом частотного подбора. В нём может быть пропущена буква, знаков препинания нет, пробелы расставлены. Вот текст
ЩСЗ ЙАБПЫАИДЙАЮЮВЗ П ЮАИЧСБУЧС ЩАХБПДАБУЮВЗ НСИШХПЮВ ИГВЦШ
ЮВЕГВБВ НГОДП П ГЙВЮШБВИУ ЙНАГАХ И ШЩСЩ ГВЦГАЦВЗ ЙСХШ РШБ
ЩДСГВ ШИПБПБИЗ П ЦЙШЧ ИДВБ ЙОА З СРБЗЮШБВИУ ДАЩЮВЗ ИДАЮВ
ИЧВБ ЕОИДГС ШХВБЗБВИУ ЦВ ЧСГВЕБАЩ ДЗЮШБИЗ НСЕБАИЧПЙВЛЭПЬ
ИАГАЕГСЩ ИБАХ
Ответы (2 шт):
Держите ручной инструмент в помощь :D на полный экран
const txt = 'ЩСЗ ЙАБПЫАИДЙАЮЮВЗ П ЮАИЧСБУЧС ЩАХБПДАБУЮВЗ НСИШХПЮВ ИГВЦШ ЮВЕГВБВ НГОДП П ГЙВЮШБВИУ ЙНАГАХ И ШЩСЩ ГВЦГАЦВЗ ЙСХШ РШБ ЩДСГВ ШИПБПБИЗ П ЦЙШЧ ИДВБ ЙОА З СРБЗЮШБВИУ ДАЩЮВЗ ИДАЮВ ИЧВБ ЕОИДГС ШХВБЗБВИУ ЦВ ЧСГВЕБАЩ ДЗЮШБИЗ НСЕБАИЧПЙВЛЭПЬ ИАГАЕГСЩ ИБАХ';
const alphabet = [{l: "а", v: 3}, {l: "б", v: 21}, {l: "в", v: 9}, {l: "г", v: 19}, {l: "д", v: 13}, {l: "е", v: 2}, {l: "ё", v: 33}, {l: "ж", v: 25}, {l: "з", v: 20}, {l: "и", v: 4}, {l: "й", v: 23}, {l: "к", v: 11}, {l: "л", v: 10}, {l: "м", v: 12}, {l: "н", v: 5},{l: "о", v: 1}, {l: "п", v: 14},{l: "р", v: 8}, {l: "с", v: 7},{l: "т", v: 6}, {l: "у", v: 15},{l: "ф", v: 31},{l: "х", v: 24},{l: "ц", v: 28},{l: "ч", v: 22},{l: "ш", v: 26},{l: "щ", v: 29},{l: "ъ", v: 32},{l: "ы", v: 17},{l: "ь", v: 18},{l: "э", v: 30},{l: "ю", v: 27},{l: "я", v: 16}];
$("#code").text(txt);
alphabet.sort((a,b) => a.v - b.v).forEach(function(item, idx){
$(`<td>${item.l}</td>`).appendTo("#letters");
$(`<td>${34-item.v}</td>`).appendTo("#src");
});
let map = txt.split('').reduce(function(acc, v){
if (v != ' ') {
acc[v] = (acc[v] || 0) + 1;
}
return acc;
}, {});
Object.entries(map)
.map(entry => ({ l: entry[0], v: entry[1] }))
.sort((a,b) => b.v-a.v)
.forEach(function(item){
$(`<td>${item.l}</td>`).appendTo("#txt");
$(`<td>${item.v}</td>`).appendTo("#target");
$(`<td><input class="" style="width:25px"/></td>`).appendTo("#inputs");
});
$("#inputs input").keyup(function(){
let result = txt;
$("#letters td").removeClass('active');
$("input").each(function(idx, el){
let letter = $("#txt td").eq(idx).text();
let v = $(this).val();
if (v) {
result = result.replaceAll(letter, `<mark>${v}</mark>`);
//console.dir(letter, v);
$('#letters td').each(function(){
if ($(this).text() == v) {
$(this).addClass('active');
}
});
}
});
$("#code").html(result);
});
.active {
background-color: yellow !important;
}
#code {
font-family: Courier, Consolas;
}
mark {
padding: 0 !important;
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="table table-bordered text-center">
<tr id="letters"></tr>
<tr id="src"></tr>
</table>
<table class="table table-bordered text-center">
<tr id="txt"></tr>
<tr id="target"></tr>
<tr id="inputs"></tr>
</table>
<div id="code" class="px-5"></div>
Текст в редактор, слова на отдельные строки и попробую менять буквы. Чтобы различать, что уже поменяно, а что осталось, заглавные меняются на строчные.
С наскока не вышло. Тогда я набросал вычисление частот и попробовал менять буквы по частотам. Получилась чепуха. Фрагмент короткий, частоты отклоняются от таблицы, найденной в Сети. Не сработало.
Тогда я попробовал анализировать слова. Тут кое-что получилось. Сперва меня увлекла пара слов ЩСЗ и ШЩСЩ. Второе слово вообще замечательное. Я придумал что это удод. А первое тогда до?. Что до?? дон? док? Тупик.
Однобуквенные слова П, И, З. Каждое из них может быть одним из авикосуя. Вариантов много, очевидного выбора я не увидел. Опять тупик.
Следующее слово, которое привлекло моё внимание, - ЙАБПЫАИДЙАЮЮВЗ. Особенно ЮЮВЗ. Это может быть нный, нное, нная, нные и ещё сколько-то вариантов. Если к этому добавить слово З, то, кажется, есть фаворит, и он один: нная. Три буквы есть, и я более или менее в них уверен. Такой старт - отличный стимул.
ЩСя ЙАБПЫАИДЙАнная П нАИЧСБУЧС ЩАХБПДАБУная НСИШХПна ИГаЦШ наЕГаБа НГОДП П
ГЙанШБаИУ ЙНАГАХ И ШЩСЩ ГаЦГАЦая ЙСХШ РШБ ЩДСГа ШИПБПБИя П ЦЙШЧ ИДаБ ЙОА я
СРБянШБаИУ ДАЩная ИДАна ИЧаБ ЕОИДГС ШХаБяБаИУ Ца ЧСГаЕБАЩ ДянШБИя
НСЕБАИЧПЙаЛЭПЬ ИАГАЕГСЩ ИБАХ
Слово Ца. Первая буква может быть одна из дзнт. Выбрать однозначно трудно. Но тут я заметил слово ГаЦГАЦая и догадался, что если Ц это з, то слово дописывается до разрезая! Для других букв варианты не придумались, а этот обещает сразу три буквы. Заменяем их.
ЩСя ЙеБПЫеИДЙенная П неИЧСБУЧС ЩеХБПДеБУная НСИШХПна ИразШ наЕраБа НрОДП П
рЙанШБаИУ ЙНереХ И ШЩСЩ разрезая ЙСХШ РШБ ЩДСра ШИПБПБИя П зЙШЧ ИДаБ ЙОе я
СРБянШБаИУ ДеЩная ИДена ИЧаБ ЕОИДрС ШХаБяБаИУ за ЧСраЕБеЩ ДянШБИя
НСЕБеИЧПЙаЛЭПЬ ИереЕрСЩ ИБеХ
Теперь ДеЩная и ИДена. Я решил что цепная и сцена. Не правда ли умственно? Меняю.
пСя ЙеБПЫесцЙенная П несЧСБУЧС пеХБПцеБУная НСсШХПна сразШ наЕраБа НрОцП П
рЙанШБасУ ЙНереХ с ШпСп разрезая ЙСХШ РШБ пцСра ШсПБПБся П зЙШЧ сцаБ ЙОе я
СРБянШБасУ цепная сцена сЧаБ ЕОсцрС ШХаБяБасУ за ЧСраЕБеп цянШБся
НСЕБесЧПЙаЛЭПЬ сереЕрСп сБеХ
Первое слово превратилось пСя, и я не знаю, как его починить, но конь уже закусил удила. сразШ это сразу, наЕраБа - набрала, уХаляласУ - удалялась.
пСя ЙелПЫесцЙенная П несЧСльЧС педлПцельная НСсудПна сразу набрала НрОцП П
рЙанулась ЙНеред с упСп разрезая ЙСду Рул пцСра усПлПлся П зЙуЧ сцал ЙОе я
СРлянулась цепная сцена сЧал бОсцрС удалялась за ЧСраблеп цянулся
НСблесЧПЙаЛЭПЬ серебрСп след
Всё больше слов читается: рЙанулась - рванулась, вНеред - вперед, звуЧ - звук. я СРлянулась - я оглянулась!
поя велПЫесцвенная П несколько педлПцельная посудПна сразу набрала прОцП П
рванулась вперед с упоп разрезая воду гул пцора усПлПлся П звук сцал вОе я
оглянулась цепная сцена скал бОсцро удалялась за кораблеп цянулся
поблескПваЛЭПЬ сереброп след
посудПна это посудина. Текст уже читается, хотя и несколько картавый:
поя велиЫесцвенная и несколько педлицельная посудина сразу набрала прОци и
рванулась вперед с упоп разрезая воду гул пцора усилился и звук сцал вОе я
оглянулась цепная сцена скал бОсцро удалялась за кораблеп цянулся
поблескиваЛЭиЬ сереброп след
поя - это ошибка. Должно быть моя. Ищу по истории замен, где я ошибся. Обнаруживаю, что цепная сцена на деле цемная сцена, а это, в свою, очередь темная стена! Откатываю изменения, правлю и получаю:
моя велиЫественная и несколько медлительная посудина сразу набрала прОти и
рванулась вперед с умом разрезая воду гул мтора усилился и звук стал вОе я
оглянулась темная стена скал бОстро удалялась за кораблем тянулся
поблескиваЛЭиЬ серебром след
велиЫественная - величественная, бОстро - быстро.
моя величественная и несколько медлительная посудина сразу набрала прыти и
рванулась вперед с умом разрезая воду гул мтора усилился и звук стал вые я
оглянулась темная стена скал быстро удалялась за кораблем тянулся
поблескиваЛЭиЬ серебром след
Тут я встрял. мтора и вые это, видимо, обещанные опечатки: мотора и выше. с умом воду не разрезают, её разрезают с шумом - ещё одна опечатка. А что такое тогда поблескиваЛЭиЬ? Сдаюсь и гуглю. Это поблескивающий из "Что сказал покойник" Иоанны Хмелевской.
моя величественная и несколько медлительная посудина сразу набрала прыти и
рванулась вперед с умом разрезая воду гул мтора усилился и звук стал вые я
оглянулась темная стена скал быстро удалялась за кораблем тянулся
поблескивающий серебром след
О да! Это был отличное расследование и очень в стиле Хмелевской. Спасибо!