-
Notifications
You must be signed in to change notification settings - Fork 0
/
cipher.html
251 lines (206 loc) · 16.1 KB
/
cipher.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
<script>
// Расшифруйте русский текст. Ответом являются слова в скобках.
// Для упрощения все буквы Ё в тексте заменены на Е, Ъ - на Ь.
let text = `
(Бэслемьч кчэафчкыь) Ая фояеэ ьщ ытвютят ячгыаэныа уеютшчы г бэслемьюь кчэафчкытюь. Егчфльгн щт гдаэ ф ытуьячдч, ая втщэашьэ ьз бчвчц гауат ь бахвещьэгс ф втуаде. Ятыаячи ая фвекьэ ютэнкьые щтбьгые, бвьытщтэ чюе бчвчцтдн чч ячбагвчцгдфчяяа даюе эьие, ыадаваюе аят тцвчгафтят, ь бвь пдаю яь ф ыачю гэектч яч адфчктдн яь ят ытыьч фабваго. Тцвчг ят щтбьгыч юяч ецтэагн втщхэсцчдн — ая уоэ ятбьгтя ячвафяою, ячбвтфьэняою бакчвыаю, яьгыаэныа яч базашью ят ауокяот кчдыьт бакчвы Заэюгт. Щтбьгыт уоэт тцвчгафтят юьгдчве Ту Гэчяь, ят жчвюе Пэвьцшт, Ьгд-Впгдая ф Яавжаэыч.
— Юяч ытшчдгс, ьягбчыдав, — щтючдьэ Заэюг, — кда фтю гэчцечд фощфтдн ба дчэчхвтже ыаяфат, дты ыты, чгэь юаь бвчцбаэашчяьс абвтфцтрдгс, фтю бвчцгдаьд бвчбвафацьдн ф дрвнюе хвтжгдфт квчщфокттяа абтгяаха бвчгдебяьыт. Ютэнкьы, ыадаваха с багоэтр г щтбьгыат, юашчд щтацяа адбвтфьдн ь фтле дчэчхвтююе. Юо фчвячюгс ф хавац багэчаучцчяяою бачщцаю, Еадгая, дты ыты гчхацяс фчкчваю юяч ячаузацьюа щтыаякьдн ацья эруабодяот зьюькчгыьт тятэьщ. Т цчэа, ыадавач бвьфчэа ятг грцт уогдва бвьуэьштчдгс ы втщфсщыч.
Ыахцт ютэнкьы г щтбьгыат егытытэ, Лчвэаы Заэюг гащфтэ гэех. Ая бвьытщтэ фгсыаха кчэафчыт, ыадавот сфьдгс ф цаю ь фовтщьд шчэтяьч бафьцтдн юьггьг Зьэдая Ыоауьд, ячючцэчяяа бвафчгдь ф хагдьяер, яч гааумтс чюе а даю, кда щцчгн бваьщалэа. Ая ятгдаткьфа бадвчуафтэ гтюаха дакяаха ьгбаэячяьс пдаха бвьытщтяьс. Щтдчю ая адбвтфьэгс ф хагдьяер ь бвьутфьэ, кда фгч дчбчвн гцчэтчдгс учщ ятг, т ятю агдтчдгс даэныа гьцчдн ь бацшьцтдн, ытытс цькн бабтцчд ф ятль гчдь. Цаыдав ецтэьэгс ы гфаью бтиьчядтю. Г Заэюгаю агдтэьгн эьлн ьягбчыдав ь с.
— С баюахе фтю бвафчгдь пдад ктг ьядчвчгяа ь баэчщяа, — гытщтэ Заэюг, бацацфьяеф гфат гдеэ ы гдаэе ь втщэашьф бчвчц гауат юяашчгдфа втщяоз уеютшчы г ьщаувтшчяьчю дтяиермьз кчэафчкыаф. — Бчвчц фтюь, цвех Еадгая, юяч ячаузацьюа щтхэтцьдн гфар фьяе: с дты цаэха цвтщяьэ фтлч эруабодгдфа. Цэс фтг шч, ьягбчыдав, фгч пда цчэа уецчд фчэьыаэчбяою бважчггьаятэняою еваыаю. Бвчшцч фгчха с цаэшчя втггытщтдн фтю а гфаьз фгдвчктз г юьгдчваю Зьэдаяаю Ынруьдаю ят Учтычв-гдвьд.
Ь ая ыавадыа втггытщтэ ьягбчыдаве да, кда ятю ешч ьщфчгдяа.
— Фад бчвчца юяар пдь щтутфяоч вьгеяыь, ыадавоч юахэь уо фощфтдн еэоуые, чгэь уо аяь яч аытщтэьгн бвчцфчгдяьытюь гдаэн гдвтляат двтхчцьь. С бвчфагзацяа щятыаю га фгчюь фьцтюь дттяабьгь ь гтю сфэсргн тфдаваю ятекяаха двецт, ф ыадаваю бватятэьщьвафтяа гда лчгднцчгсд втщэькяоз льжваф, ацятыа с фояешцчя бвьщятднгс, кда пдад льжв цэс ючяс гафчвлчяятс яафагдн. Ичэн ьщаувчдтдчэс пдат гьгдчюо щтыэрктэтгн, акчфьцяа, ф даю, кдауо гыводн, кда пдь щяткыь сфэсрдгс бьгнючятюь, ь фоцтдн ьз щт цчдгыьч вьгеяыь. Яа фгсыьт, ыда цахтцтчдгс, кда щяткыь пдь гаадфчдгдферд уеыфтю, учщ агауаха двецт втщхтцтчд ьз, чгэь фагбаэнщечдгс ауокяоюь бвтфьэтюь втщхтцофтяьс льжваф. Бчвфтс щтбьгыт уоэт дты ыавадыт, кда цтэт юяч фащюашяагдн гцчэтдн фгчха ацяа бвтфцабацауяач бвчцбаэашчяьч, аытщтфлччгс фбагэчцгдфьь бвтфьэняою. С хафавр а жэтхтз. Жэтхь пдь ебадвчуэсрдгс эьлн цэс даха, кдауо адючктдн ыаяио адцчэняоз гэаф. Уаэнлч яькчха ба бчвфат щтбьгыч с егдтяафьдн яч юах. Юяч яешчя уоэ гфчшьт ютдчвьтэ. Багчдьф ючяс фа фдават втщ, юьгдчв Зьэдая Ынруьд бчвчцтэ юяч двь яафоч щтбьгыь, ьщ ыадавоз багэчцясс, ба фгчт фчвасдяагдь, гацчвштэт фгчха ацяа гэафа, дты ыты ф ячт яч уоэа жэтхаф. Цфч цвехьч щтбьгыь яткьятэьгн, ячгаюячяяа, г ацяаха ь даха шч гэафт ьщ кчдовчз уеыф.
`
text = text.toLowerCase()
console.log(text)
let counter = str => {
return str.split('').reduce((total, letter) => {
total[letter] ? total[letter]++ : total[letter] = 1;
return total;
}, {});
}
let frequency = counter(text)
// let words = wordFreq(text)
let chaosDic = {
'а': 1, 'т': 2, 'ч': 3, 'ь': 4, 'г': 5, 'д': 6, 'я': 7, 'ф': 8, 'в': 9, 'э': 10,
'ы': 11, 'ю': 12, 'б': 13, 'ц': 14, 'щ': 15, 'е': 16, 'с': 17, 'н': 18, 'к': 19, 'о': 20,
'у': 21, 'х': 22, 'з': 23, 'ш': 24, 'р': 25, 'л': 26, 'п': 27, 'ж': 28, 'и': 29, 'м': 30
}
let rusDic = {
1: 'о', 2: 'е', 3: 'а', 4: 'и', 5: 'н', 6: 'т', 7: 'с', 8: 'р', 9: 'в', 10: 'л',
11: 'к', 12: 'м', 13: 'д', 14: 'п', 15: 'у', 16: 'я', 17: 'ы', 18: 'ь', 19: 'г', 20: 'з',
21: 'б', 22: 'ч', 23: 'х', 24: 'ж', 25: 'ш', 26: 'ю', 27: 'ц', 28: 'щ', 29: 'э', 30: 'ф'
}
let decipher = ''
for (let char of text) {
if (chaosDic.hasOwnProperty(char))
decipher += rusDic[chaosDic[char]]
else
decipher += char
}
console.log(decipher)
// Manual correction
decipher = decipher.replace(/с/g, "@1@")
decipher = decipher.replace(/а/g, "@2@")
decipher = decipher.replace(/н/g, "@3@")
decipher = decipher.replace(/я/g, "@4@")
decipher = decipher.replace(/е/g, "@5@")
decipher = decipher.replace(/д/g, "@6@")
decipher = decipher.replace(/ы/g, "@7@")
decipher = decipher.replace(/р/g, "@8@")
decipher = decipher.replace(/у/g, "@9@")
decipher = decipher.replace(/г/g, "@10@")
decipher = decipher.replace(/в/g, "@11@")
decipher = decipher.replace(/ю/g, "@12@")
decipher = decipher.replace(/ф/g, "@13@")
decipher = decipher.replace(/@1@/g, "н")
decipher = decipher.replace(/@2@/g, "е")
decipher = decipher.replace(/@3@/g, "с")
decipher = decipher.replace(/@4@/g, "у")
decipher = decipher.replace(/@5@/g, "a")
decipher = decipher.replace(/@6@/g, "п")
decipher = decipher.replace(/@7@/g, "я")
decipher = decipher.replace(/@8@/g, "в")
decipher = decipher.replace(/@9@/g, "з")
decipher = decipher.replace(/@10@/g, "ч")
decipher = decipher.replace(/@11@/g, "р")
decipher = decipher.replace(/@12@/g, "ш")
decipher = decipher.replace(/@13@/g, "щ")
console.log(decipher)
/*
(пляшущие человечки) он взнул из кaрмaнa несколько бумaжек с пляшущими человечкaми. усевшись зa стол в кaбинете, он рaзложил их переп собоa и почрузился в рaботу. нaконеэ он вручил мaльчику зaписку, прикaзaл ему перепaть ее непосрепственно тому лиэу, которому онa aпресовaнa, и при цтом ни в коем случaе не отвечaть ни нa кaкие вопросз. aпрес нa зaписке мне упaлось рaзчляпеть — он бзл нaписaн неровнзм, непрaвильнзм почерком, нисколько не похожим нa обзчнзa четкиa почерк холмсa. зaпискa бзлa aпресовaнa мистеру aб слени, нa щерму цлрипжa, ист-рцстон в норщолке.
— мне кaжется, инспектор, — зaметил холмс, — что вaм слепует вззвaть по телечрaщу конвоa, тaк кaк, если мои препположения опрaвпaштся, вaм препстоит препровопить в тшрьму чрaщствa чрезвзчaaно опaсночо преступникa. мaльчик, которочо я посзлaш с зaпискоa, может зaопно отпрaвить и вaшу телечрaмму. мз вернемся в чороп послеобепеннзм поезпом, уотсон, тaк кaк сечопня вечером мне необхопимо зaкончить опин лшбопзтнзa химическиa aнaлиз. a пело, которое привело нaс сшпa бзстро приближaется к рaзвязке.
кочпa мaльчик с зaпискоa ускaкaл, шерлок холмс созвaл случ. он прикaзaл всякочо человекa, которзa явится в пом и взрaзит желaние повипaть миссис хилтон кзобит, немепленно провести в чостинуш, не сообщaя ему о том, что зпесь произошло. он нaстоaчиво потребовaл сaмочо точночо исполнения цточо прикaзaния. зaтем он отпрaвился в чостинуш и прибaвил, что все теперь спелaется без нaс, a нaм остaется только сипеть и попжипaть, кaкaя пичь попaпет в нaши сети. поктор упaлился к своим пaэиентaм. с холмсом остaлись лишь инспектор и я.
— я помочу вaм провести цтот чaс интересно и полезно, — скaзaл холмс, попопвинув своa стул к столу и рaзложив переп собоa множество рaзнзх бумaжек с изобрaжением тaнэушщих человечков. — переп вaми, пруч уотсон, мне необхопимо зaчлaпить свош вину: я тaк полчо прaзнил вaше лшбопзтство. пля вaс же, инспектор, все цто пело бупет великолепнзм прощессионaльнзм уроком. прежпе всечо я полжен рaсскaзaть вaм о своих встречaх с мистером хилтоном кьшбитом нa беaкер-стрит.
и он коротко рaсскaзaл инспектору то, что нaм уже известно.
— вот перепо мнош цти зaбaвнзе рисунки, которзе мочли бз вззвaть улзбку, если бз они не окaзaлись препвестникaми столь стрaшноa трaчепии. я превосхопно знaком со всеми випaми тaaнописи и сaм являшсь aвтором нaучночо трупa, в котором проaнaлизировaно сто шестьпесят рaзличнзх шищров, опнaко я взнужпен признaться, что цтот шищр пля меня совершеннaя новость. эель изобретaтеля цтоa системз зaклшчaлaсь, очевипно, в том, чтобз скрзть, что цти знaчки являштся письменaми, и взпaть их зa петские рисунки. но всякиa, кто почaпaется, что знaчки цти соответствушт буквaм, без особочо трупa рaзчaпaет их, если воспользуется обзчнзми прaвилaми рaзчaпзвaния шищров. первaя зaпискa бзлa тaк короткa, что пaлa мне возможность спелaть всечо опно прaвпопопобное препположение, окaзaвшееся впослепствии прaвильнзм. я човорш о щлaчaх. щлaчи цти употребляштся лишь пля точо, чтобз отмечaть конэз отпельнзх слов. больше ничечо по первоa зaписке я устaновить не моч. мне нужен бзл свежиa мaтериaл. посетив меня во второa рaз, мистер хилтон кьшбит перепaл мне три новзе зaписки, из которзх послепняя, по всеa вероятности, сопержaлa всечо опно слово, тaк кaк в неa не бзло щлaчов. пве пручие зaписки нaчинaлись, несомненно, с опночо и точо же словa из четзрех букв.
*/
/*
Combined full russian dic
о 55414481 1
Е 42876141 2
// е 42691213 2
// ё 184928 33
а 40487008 3
И 43259404 4
// и 37153142 4
// й 6106262 23
н 33838881 5
т 31620970 6
с 27627040 7
р 23916825 8
в 22930719 9
л 22230174 10
к 17653469 11
м 16203060 12
д 15052118 13
п 14201572 14
у 13245712 15
я 10139085 16
ы 9595941 17
Ь 8970065 18
// ь 8784613 18
// ъ 185452 32
г 8564640 19
з 8329904 20
б 8051767 21
ч 7300193 22
// й ---
х 4904176 24
ж 4746916 25
ш 3678738 26
ю 3220715 27
ц 2438807 28
щ 1822476 29
э 1610107 30
ф 1335747 31
// ъ ---
// ё ---
*/
/*
Our text stats
а: 319 1
т: 235 2
ч: 215 3
ь: 192 4
г: 173 5
д: 173 6
я: 162 7
ф: 126 8
в: 125 9
э: 124 10
ы: 106 11
ю: 97 12
б: 91 13
ц: 84 14
щ: 63 15
е: 60 16
с: 56 17
н: 52 18
к: 48 19
о: 48 20
у: 45 21
х: 41 22
з: 25 23
ш: 25 24
р: 19 25
л: 18 26
п: 12 27
ж: 11 28
и: 6 29
м: 4 30
*/
/*
Some official stats
http://dict.ruslang.ru/freq.php?act=show&dic=freq_letters
о 55414481 1
е 42691213 2
а 40487008 3
и 37153142 4
н 33838881 5
т 31620970 6
с 27627040 7
р 23916825 8
в 22930719 9
л 22230174 10
к 17653469 11
м 16203060 12
д 15052118 13
п 14201572 14
у 13245712 15
я 10139085 16
ы 9595941 17
ь 8784613 18
г 8564640 19
з 8329904 20
б 8051767 21
ч 7300193 22
й 6106262 23
х 4904176 24
ж 4746916 25
ш 3678738 26
ю 3220715 27
ц 2438807 28
щ 1822476 29
э 1610107 30
ф 1335747 31
ъ 185452 32
ё 184928 33
*/
var sortable = [];
for (var f in frequency) {
sortable.push([f, frequency[f]]);
}
sortable.sort(function(a, b) {
return a[1] - b[1];
});
function wordFreq(string) {
var words = string.replace(/[.]/g, '').split(/\s/);
var freqMap = {};
words.forEach(function(w) {
if (!freqMap[w]) {
freqMap[w] = 0;
}
freqMap[w] += 1;
});
return freqMap;
}
</script>