var E2R={
"a": {
"а": 170,
"я": 30,
},
"b": {
"б": 130,
"6": 30,
"ь": 30,
"ъ": 10
},
"c": {
"с": 200
},
"d": {
"д": 100,
"б": 50,
"o": 40,
"ф": 10
},
"e": {
"е": 190,
"o": 10
},
"f": {
"т": 70,
"ф": 70,
"р": 50,
"6": 10
},
"g": {
"д": 100,
"8": 50,
"я": 40
},
"h": {
"п": 100,
"н": 50,
"л": 40,
"и": 10
},
"i": {
"i": 120,
"!": 50,
"1": 30
},
"j": {
"i": 80,
"?": 30,
},
"k": {
"к": 200
},
"l": {
"1": 100,
"!": 40
},
"m": {
"м": 150,
"т": 20,
"ш": 10,
"ж": 20
},
"n": {
"п": 190,
"р": 10
},
"o": {
"о": 190,
"е": 10
},
"p": {
"р": 170,
"п": 20,
"б": 10
},
"q": {
"о": 70,
"р": 60,
"б": 60
},
"r": {
"г": 195,
"к": 5
},
"s": {
"з": 100
,"c": 100
},
"t": {
"т": 160,
"г": 30,
"+": 30
},
"u": {
"ч": 60,
"и": 80,
"н": 30,
"ц": 20,
"ы": 10
},
"v": {
"и": 80,
"у": 60,
"ц": 30,
"ч": 30
},
"w": {
"ш": 80,
"щ": 60,
"ж": 40,
"м": 20
},
"x": {
"х": 200
},
"y": {
"у": 200
},
"z": {
"з": 160,
"2": 30,
"с": 10
},
"A": {
"А": 160,
"Я": 20,
"4": 20
},
"B": {
"В": 150,
"Б": 20,
"8": 20,
"6": 10
},
"C": {
"С": 186,
"6": 7,
"Г": 7
},
"D": {
"0": 80,
"В": 80,
"Р": 20,
"0": 20
},
"E": {
"Е": 150,
"Ё": 40,
"Є": 10
},
"F": {
"Г": 130,
"P": 30,
"Е": 40
},
"G": {
"Б": 80,
"6": 90,
"Ф": 20,
"О": 10
},
"H": {
"Н": 170,
"И": 20,
"П": 10,
},
"I": {
"1": 100,
"I": 80,
"!": 20
},
"J": {
"1": 30,
"Ч": 10
},
"K": {
"К": 200
},
"L": {
"7": 40,
},
"M": {
"М": 140,
"Ш": 30,
"Щ": 20,
"Ж": 10
},
"N": {
"И": 100,
"Н": 90,
"М": 10
},
"O": {
"О": 140,
"0": 30,
"Ф": 20,
"9": 5,
"8": 5
},
"P": {
"Р": 200
},
"Q": {
"Ф": 80,
"О": 70,
"9": 30,
"Ю": 20
},
"R": {
"Р": 100,
"К": 20,
"Я": 80
},
"S": {
"З": 100,
"С": 50,
"8": 20,
"5": 30
},
"T": {
"Т": 150,
"Г": 25,
"7": 25
},
"U": {
"У": 100,
"И": 20,
"Ц": 30,
"Ч": 10
},
"V": {
"У": 100,
"И": 60,
"Ц": 20
},
"W": {
"Ш": 90,
"Щ": 60,
"Ж": 40
},
"X": {
"Х": 200
},
"Y": {
"У": 190,
"Т": 10
},
"Z": {
"2": 80,
"7": 30,
"С": 30,
"З": 60
}
}
function isVowel(char){
return "аоэиуыеёюя".indexOf(char.toLocaleLowerCase())>=0 ? 1 : 0;
}
function vorefy(text)
{
// Г => C 0.85
// Г => Г 0.15
// С => С 0.30
// С => Г 0.70
var markov = [[0.3,0.7],[0.85,0.15]];
var mCorr = [ 1/Math.sqrt(0.3*0.7), 1/Math.sqrt(0.85*0.15) ];
//степень влияния марковских вореантностей
var pow = x => Math.pow(x,2);
var prev=null;
return text.replace(/./g,(char,offset,text) =>
{
if (E2R[char]){
var replace = Object.entries(E2R[char]);
if (1==replace.length) {
prev = replace[0][0];
return prev;
}
var r = Math.random()*200, probability=0;
for (const [k, v] of replace) {
vowel = isVowel(k);
probability += v * ((null==prev) ? 1
: pow(
mCorr[vowel]*2*markov[isVowel(prev)][vowel]
));
if (r<=probability) {
prev = k;
return prev;
}
}
}
prev=null;
return char;
});
}
console.log(vorefy(`var r = Math.random()*200, probability=0;
for (const [k, v] of replace) {
vowel = isVowel(k);
probability += v * ((null==prev) ? 1
: pow(
mCorr[vowel]*2*markov[isVowel(prev)][vowel]
));
if (r<=probability) {
prev = k;
return prev;
}
}`))
CnZhciBFMlI9ewogICJhIjogewogICAgItCwIjogMTcwLAogICAgItGPIjogMzAsCiAgfSwKICAiYiI6IHsKICAgICLQsSI6IDEzMCwKICAgICI2IjogMzAsCiAgICAi0YwiOiAzMCwgICAgCiAgICAi0YoiOiAxMAogIH0sCiAgImMiOiB7CiAgICAi0YEiOiAyMDAKICB9LAogICJkIjogewogICAgItC0IjogMTAwLAogICAgItCxIjogNTAsCiAgICAibyI6IDQwLAogICAgItGEIjogMTAKICB9LAogICJlIjogewogICAgItC1IjogMTkwLAogICAgIm8iOiAxMAogIH0sCiAgImYiOiB7CiAgICAi0YIiOiA3MCwKICAgICLRhCI6IDcwLAogICAgItGAIjogNTAsCiAgICAiNiI6IDEwCiAgfSwKICAiZyI6IHsKICAgICLQtCI6IDEwMCwKICAgICI4IjogNTAsCiAgICAi0Y8iOiA0MAogIH0sCiAgImgiOiB7CiAgICAi0L8iOiAxMDAsCiAgICAi0L0iOiA1MCwKICAgICLQuyI6IDQwLAogICAgItC4IjogMTAKICB9LAogICJpIjogewogICAgImkiOiAxMjAsCiAgICAiISI6IDUwLAogICAgIjEiOiAzMAogIH0sCiAgImoiOiB7CiAgICAiaSI6IDgwLAogICAgIj8iOiAzMCwKICB9LAogICJrIjogewogICAgItC6IjogMjAwCiAgfSwKICAibCI6IHsKICAgICIxIjogMTAwLAogICAgIiEiOiA0MCAgICAKICB9LAogICJtIjogewogICAgItC8IjogMTUwLAogICAgItGCIjogMjAsCiAgICAi0YgiOiAxMCwKICAgICLQtiI6IDIwCiAgfSwKICAibiI6IHsKICAgICLQvyI6IDE5MCwKICAgICLRgCI6IDEwCiAgfSwKICAibyI6IHsKICAgICLQviI6IDE5MCwKICAgICLQtSI6IDEwCiAgfSwKICAicCI6IHsKICAgICLRgCI6IDE3MCwKICAgICLQvyI6IDIwLAogICAgItCxIjogMTAKICB9LAogICJxIjogewogICAgItC+IjogNzAsCiAgICAi0YAiOiA2MCwKICAgICLQsSI6IDYwCiAgfSwKICAiciI6IHsKICAgICLQsyI6IDE5NSwKICAgICLQuiI6IDUKICB9LAogICJzIjogewogICAgICLQtyI6IDEwMAogICAgLCJjIjogMTAwCiAgfSwKICAidCI6IHsKICAgICLRgiI6IDE2MCwKICAgICLQsyI6IDMwLAogICAgIisiOiAzMAogIH0sCiAgInUiOiB7CiAgICAi0YciOiA2MCwKICAgICLQuCI6IDgwLAogICAgItC9IjogMzAsCiAgICAi0YYiOiAyMCwKICAgICLRiyI6IDEwCiAgfSwKICAidiI6IHsKICAgICLQuCI6IDgwLAogICAgItGDIjogNjAsCiAgICAi0YYiOiAzMCwKICAgICLRhyI6IDMwCiAgfSwKICAidyI6IHsKICAgICLRiCI6IDgwLAogICAgItGJIjogNjAsCiAgICAi0LYiOiA0MCwKICAgICLQvCI6IDIwCiAgfSwKICAieCI6IHsKICAgICLRhSI6IDIwMAogIH0sCiAgInkiOiB7CiAgICAi0YMiOiAyMDAKICB9LAogICJ6IjogewogICAgItC3IjogMTYwLAogICAgIjIiOiAzMCwKICAgICLRgSI6IDEwCiAgfSwKICAiQSI6IHsKICAgICLQkCI6IDE2MCwKICAgICLQryI6IDIwLAogICAgIjQiOiAyMAogIH0sCiAgIkIiOiB7CiAgICAi0JIiOiAxNTAsCiAgICAi0JEiOiAyMCwKICAgICI4IjogMjAsCiAgICAiNiI6IDEwCiAgfSwKICAiQyI6IHsKICAgICLQoSI6IDE4NiwKICAgICI2IjogNywKICAgICLQkyI6IDcKICB9LAogICJEIjogewogICAgIjAiOiA4MCwKICAgICLQkiI6IDgwLAogICAgItCgIjogMjAsCiAgICAiMCI6IDIwCiAgfSwKICAiRSI6IHsKICAgICLQlSI6IDE1MCwKICAgICLQgSI6IDQwLAogICAgItCEIjogMTAKICB9LAogICJGIjogewogICAgItCTIjogMTMwLAogICAgIlAiOiAzMCwKICAgICLQlSI6IDQwCiAgfSwKICAiRyI6IHsKICAgICLQkSI6IDgwLAogICAgIjYiOiA5MCwKICAgICLQpCI6IDIwLAogICAgItCeIjogMTAKICB9LAogICJIIjogewogICAgItCdIjogMTcwLAogICAgItCYIjogMjAsCiAgICAi0J8iOiAxMCwKICB9LAogICJJIjogewogICAgIjEiOiAxMDAsCiAgICAiSSI6IDgwLAogICAgIiEiOiAyMAogIH0sCiAgIkoiOiB7CiAgICAiMSI6IDMwLAogICAgItCnIjogMTAKICB9LAogICJLIjogewogICAgItCaIjogMjAwCiAgfSwKICAiTCI6IHsKICAgICI3IjogNDAsCiAgfSwKICAiTSI6IHsKICAgICLQnCI6IDE0MCwKICAgICLQqCI6IDMwLAogICAgItCpIjogMjAsCiAgICAi0JYiOiAxMAogIH0sCiAgIk4iOiB7CiAgICAi0JgiOiAxMDAsCiAgICAi0J0iOiA5MCwKICAgICLQnCI6IDEwCiAgfSwKICAiTyI6IHsKICAgICLQniI6IDE0MCwKICAgICIwIjogMzAsCiAgICAi0KQiOiAyMCwKICAgICI5IjogNSwKICAgICI4IjogNQogIH0sCiAgIlAiOiB7CiAgICAi0KAiOiAyMDAKICB9LAogICJRIjogewogICAgItCkIjogODAsCiAgICAi0J4iOiA3MCwKICAgICI5IjogMzAsCiAgICAi0K4iOiAyMAogIH0sCiAgIlIiOiB7CiAgICAi0KAiOiAxMDAsCiAgICAi0JoiOiAyMCwKICAgICLQryI6IDgwCiAgfSwKICAiUyI6IHsKICAgICLQlyI6IDEwMCwKICAgICLQoSI6IDUwLAogICAgIjgiOiAyMCwKICAgICI1IjogMzAKICB9LAogICJUIjogewogICAgItCiIjogMTUwLAogICAgItCTIjogMjUsCiAgICAiNyI6IDI1CiAgfSwKICAiVSI6IHsKICAgICLQoyI6IDEwMCwKICAgICLQmCI6IDIwLAogICAgItCmIjogMzAsCiAgICAi0KciOiAxMAogIH0sCiAgIlYiOiB7CiAgICAi0KMiOiAxMDAsCiAgICAi0JgiOiA2MCwKICAgICLQpiI6IDIwCiAgfSwKICAiVyI6IHsKICAgICLQqCI6IDkwLAogICAgItCpIjogNjAsICAgIAogICAgItCWIjogNDAKICB9LAogICJYIjogewogICAgItClIjogMjAwCiAgfSwKICAiWSI6IHsKICAgICLQoyI6IDE5MCwKICAgICLQoiI6IDEwCiAgfSwKICAiWiI6IHsKICAgICIyIjogODAsCiAgICAiNyI6IDMwLAogICAgItChIjogMzAsCiAgICAi0JciOiA2MAogIH0KfQoKZnVuY3Rpb24gaXNWb3dlbChjaGFyKXsKICAgIHJldHVybiAi0LDQvtGN0LjRg9GL0LXRkdGO0Y8iLmluZGV4T2YoY2hhci50b0xvY2FsZUxvd2VyQ2FzZSgpKT49MCA/IDEgOiAwOwp9CgpmdW5jdGlvbiB2b3JlZnkodGV4dCkKewogICAgLy8g0JMgPT4gQyAwLjg1CiAgICAvLyDQkyA9PiDQkyAwLjE1CiAgICAvLyDQoSA9PiDQoSAwLjMwCiAgICAvLyDQoSA9PiDQkyAwLjcwICAgCiAgICB2YXIgbWFya292ID0gW1swLjMsMC43XSxbMC44NSwwLjE1XV07IAogICAgdmFyIG1Db3JyID0gWyAxL01hdGguc3FydCgwLjMqMC43KSwgMS9NYXRoLnNxcnQoMC44NSowLjE1KSBdOwogICAgLy/RgdGC0LXQv9C10L3RjCDQstC70LjRj9C90LjRjyDQvNCw0YDQutC+0LLRgdC60LjRhSDQstC+0YDQtdCw0L3RgtC90L7RgdGC0LXQuQogICAgdmFyIHBvdyA9IHggPT4gTWF0aC5wb3coeCwyKTsKICAgIAogICAgdmFyIHByZXY9bnVsbDsKICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoLy4vZywoY2hhcixvZmZzZXQsdGV4dCkgPT4gCiAgICB7CiAgICAgICAgaWYgKEUyUltjaGFyXSl7CiAgICAgICAgICAgIHZhciByZXBsYWNlID0gT2JqZWN0LmVudHJpZXMoRTJSW2NoYXJdKTsKICAgICAgICAgICAgaWYgKDE9PXJlcGxhY2UubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBwcmV2ID0gcmVwbGFjZVswXVswXTsKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoyMDAsIHByb2JhYmlsaXR5PTA7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHJlcGxhY2UpIHsKICAgICAgICAgICAgICAgIHZvd2VsID0gaXNWb3dlbChrKTsKICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5ICs9IHYgKiAoKG51bGw9PXByZXYpID8gMSAKICAgICAgICAgICAgICAgICAgICA6IHBvdyggCiAgICAgICAgICAgICAgICAgICAgICAgIG1Db3JyW3Zvd2VsXSoyKm1hcmtvdltpc1Zvd2VsKHByZXYpXVt2b3dlbF0KICAgICAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgICAgIGlmIChyPD1wcm9iYWJpbGl0eSkgewogICAgICAgICAgICAgICAgICAgIHByZXYgPSBrOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByZXY9bnVsbDsKICAgICAgICByZXR1cm4gY2hhcjsKICAgIH0pOyAgICAgICAgCn0KCmNvbnNvbGUubG9nKHZvcmVmeShgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjIwMCwgcHJvYmFiaWxpdHk9MDsKZm9yIChjb25zdCBbaywgdl0gb2YgcmVwbGFjZSkgewogICAgdm93ZWwgPSBpc1Zvd2VsKGspOwogICAgcHJvYmFiaWxpdHkgKz0gdiAqICgobnVsbD09cHJldikgPyAxIAogICAgICAgIDogcG93KCAKICAgICAgICAgICAgbUNvcnJbdm93ZWxdKjIqbWFya292W2lzVm93ZWwocHJldildW3Zvd2VsXQogICAgICAgICkpOwogICAgaWYgKHI8PXByb2JhYmlsaXR5KSB7CiAgICAgICAgcHJldiA9IGs7CiAgICAgICAgcmV0dXJuIHByZXY7CiAgICB9Cn1gKSk=