var E2R={
"a": {
"а": 170,
"я": 30
},
"b": {
"б": 105,
"ы": 45,
"6": 30,
"ъ": 15,
"ъ": 5
},
"c": {
"с": 185,
"є": 25,
"о": 15
},
"d": {
"д": 90,
"б": 80,
"o": 20,
"ф": 10
},
"e": {
"е": 180,
"ё": 10,
"є": 8,
"o": 2
},
"f": {
"т": 70,
"ф": 70,
"р": 50,
"є": 50,
"i": 10
},
"g": {
"д": 135,
"я": 60,
"8": 5
},
"h": {
"п": 100,
"л": 90,
"н": 30,
"и": 10
},
"i": {
"i": 190,
"!": 2,
},
"j": {
"i": 70,
"?": 50,
},
"k": {
"к": 200
},
"l": {
"l": 80,
"i": 80,
"г": 50,
"л": 50,
"!": 3
},
"m": {
"м": 125,
"ж": 25,
"т": 25,
"ш": 25
},
"n": {
"п": 100,
"л": 100,
"р": 5,
"о": 5
},
"o": {
"о": 190,
"е": 10
},
"p": {
"р": 140,
"б": 30,
"о": 20,
"п": 10,
},
"q": {
"я": 100,
"о": 30,
"д": 25,
"ф": 25,
"р": 20
},
"r": {
"г": 195,
"к": 5
},
"s": {
"з": 100
,"c": 100
},
"t": {
"т": 155,
"г": 40
// ,"+": 2
},
"u": {
"и": 95,
"ч": 35,
"н": 30,
"ц": 20,
"у": 15,
"ы": 10
},
"v": {
"и": 80,
"у": 60,
"ц": 30,
"ч": 30
},
"w": {
"ш": 80,
"щ": 60,
"ж": 40,
"м": 20
},
"x": {
"х": 200
},
"y": {
"у": 200
},
"z": {
"з": 160,
"с": 20,
"2": 10
},
"A": {
"А": 170,
"Я": 20,
"4": 10
},
"B": {
"В": 150,
"Б": 20,
"8": 20,
"6": 10
},
"C": {
"С": 186,
"Є": 20,
"6": 7
},
"D": {
"О": 80,
"В": 50,
"0": 50,
"Ю": 10,
"Р": 10
},
"E": {
"Е": 150,
"Ё": 40,
"Є": 25
},
"F": {
"Г": 130,
"P": 30,
"Е": 40
},
"G": {
"Б": 90,
"6": 90,
"Є": 40,
"Ф": 10,
"О": 10
},
"H": {
"Н": 170,
"И": 20,
"П": 10,
},
"I": {
"1": 100,
"I": 90,
"!": 4
},
"J": {
"1": 30,
"Ч": 10
},
"K": {
"К": 200
},
"L": {
"L" : 160
,"I_": 40
},
"M": {
"М": 140,
"Ш": 30,
"Щ": 20,
"Ж": 10
},
"N": {
"И": 100,
"Н": 80,
"Й": 10,
"М": 10
},
"O": {
"О": 130,
"0": 30,
"Q": 33,
"9": 2,
"8": 2
},
"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": {
"U": 20,
"У": 100,
"И": 30,
"Ц": 30,
"Ч": 10
},
"V": {
"У": 100,
"И": 60,
"Ц": 20,
"\/": 7,
},
"W": {
"Ш": 100,
"Щ": 60,
"Ж": 40
},
"X": {
"Х": 200
},
"Y": {
"У": 190,
"Т": 10
},
"Z": {
"2": 80,
"З": 60,
"7": 30,
"С": 30
}
,0: {"0":5,"D":5,"O":5,"Q":5}
,1: {"1":5,"l":5,"I":5}
,2: {"2":1,"Z":5}
,3: {"3":7,"Э":5}
,4: {"4":7,"A":5}
,5: {"5":10,"S":7}
,6: {"6":10,"б":7}
,7: {"7":10,"Т":5,"Г":5}
,8: {"8":10,"B":5,}
,9: {"9":10,"O":2,"Я":5}
}
const is={
vowel: ( char ) => is.substr(char,"аоэиуыеёюя0aeoui")
,letter: ( char ) => char.toLowerCase() != char.toUpperCase()
,number: ( char ) => /\d/.test(char)
,substr: (char,str) => null==char ? null : str.indexOf(char.toLocaleLowerCase())>=0 ? 1 : 0
}
function vorefy(text,sProb)
{
var prev = null;
var seq = {len: 0, vowel: 0, prob:sProb||[1,8,200,200,200,200]};
return text.replace(/./g,(char,offset,text) =>
{
if (null!=E2R[char]){
if (null == prev || is.vowel(prev) != seq.vowel){
seq.len = 0;
seq.vowel = is.vowel(prev);
}else{
++seq.len;
}
var replace = Object.entries(E2R[char]);
if (1==replace.length) {
prev = replace[0][0];
return prev;
}
var mr = Object.create(null);
var mrTotalProb = 0;
for (const [k, v] of replace) {
if (is.number(k)){
if (null==prev) mr[k] = v*2.5;
else continue;
}else{
if (null==prev && is.substr(k,"ьъы")) continue;
mr[k] = v;
if (is.vowel(k)==seq.vowel) mr[k] /= seq.prob[seq.len];
}
mrTotalProb += mr[k];
}
var r = Math.random()*mrTotalProb, probability=0;
for (var mk in mr) {
probability += mr[mk];
if (r <= probability) {
prev = mk;
return prev;
}
}
}
prev = null;
return char;
});
}
console.log(vorefy(`#include <new>
template <typename Lhs, typename Rhs>
auto replace(Lhs *lhs, Rhs) {
return *new (reinterpret_cast<void*>(lhs)) Rhs{};
}
int main() {
auto f1 = &add;
auto f2 = replace(add, [](int a, int b) { return a - b; });
f1(4, 2);
f2(4, 2);
}
by :: Int -> [a] -> [[a]]
by _ [] = []
by n xs = take n xs: by n (drop n xs)
words2 :: String -> (String, String)
words2 str = conc $ words str where
conc (x:xs) = (x, concat xs)
groupTemplates :: String -> [(String, String)]
groupTemplates xs = map (words2) (lines xs)
decodeOne :: String -> [(String, String)] -> String
decodeOne _ [] = ""
decodeOne str (x:xs) | str == fst x = fst x ++ " " ++ snd x ++ "\n"
decodeOne str (_:xs) = decodeOne str xs
decode :: [String] -> [(String, String)] -> String
decode bs ts = concat $ map (\b -> decodeOne b ts) bs
main = do
bits <- readFile "bits.txt"
templates <- readFile "templates.txt"
writeFile "out.txt" $ decode (by 4 bits) (groupTemplates templates)
`));
dmFyIEUyUj17CiAgImEiOiB7CiAgICAi0LAiOiAxNzAsCiAgICAi0Y8iOiAzMAogIH0sCiAgImIiOiB7CiAgICAi0LEiOiAxMDUsCiAgICAi0YsiOiA0NSwKICAgICI2IjogMzAsCiAgICAi0YoiOiAxNSwKICAgICLRiiI6IDUKICB9LAogICJjIjogewogICAgItGBIjogMTg1LAogICAgItGUIjogMjUsICAgIAogICAgItC+IjogMTUKICB9LAogICJkIjogewogICAgItC0IjogOTAsCiAgICAi0LEiOiA4MCwKICAgICJvIjogMjAsCiAgICAi0YQiOiAxMAogIH0sCiAgImUiOiB7CiAgICAi0LUiOiAxODAsCiAgICAi0ZEiOiAxMCwgCiAgICAi0ZQiOiA4LAogICAgIm8iOiAyCiAgfSwKICAiZiI6IHsKICAgICLRgiI6IDcwLAogICAgItGEIjogNzAsCiAgICAi0YAiOiA1MCwKICAgICLRlCI6IDUwLCAgICAKICAgICJpIjogMTAKICB9LAogICJnIjogewogICAgItC0IjogMTM1LAogICAgItGPIjogNjAsCiAgICAiOCI6IDUKICB9LAogICJoIjogewogICAgItC/IjogMTAwLAogICAgItC7IjogOTAsICAgIAogICAgItC9IjogMzAsCiAgICAi0LgiOiAxMAogIH0sCiAgImkiOiB7CiAgICAiaSI6IDE5MCwKICAgICIhIjogMiwKICB9LAogICJqIjogewogICAgImkiOiA3MCwKICAgICI/IjogNTAsCiAgfSwKICAiayI6IHsKICAgICLQuiI6IDIwMAogIH0sCiAgImwiOiB7CiAgICAibCI6IDgwLAogICAgImkiOiA4MCwKICAgICLQsyI6IDUwLCAgICAKICAgICLQuyI6IDUwLCAgICAKICAgICIhIjogMyAgICAKICB9LAogICJtIjogewogICAgItC8IjogMTI1LAogICAgItC2IjogMjUsCiAgICAi0YIiOiAyNSwKICAgICLRiCI6IDI1CiAgfSwKICAibiI6IHsKICAgICLQvyI6IDEwMCwKICAgICLQuyI6IDEwMCwgICAgCiAgICAi0YAiOiA1LCAgICAKICAgICLQviI6IDUKICB9LAogICJvIjogewogICAgItC+IjogMTkwLAogICAgItC1IjogMTAKICB9LAogICJwIjogewogICAgItGAIjogMTQwLAogICAgItCxIjogMzAsCiAgICAi0L4iOiAyMCwKICAgICLQvyI6IDEwLAogIH0sCiAgInEiOiB7CiAgICAi0Y8iOiAxMDAsCiAgICAi0L4iOiAzMCwKICAgICLQtCI6IDI1LCAgICAKICAgICLRhCI6IDI1LAogICAgItGAIjogMjAgICAgCiAgfSwKICAiciI6IHsKICAgICLQsyI6IDE5NSwKICAgICLQuiI6IDUKICB9LAogICJzIjogewogICAgICLQtyI6IDEwMAogICAgLCJjIjogMTAwCiAgfSwKICAidCI6IHsKICAgICLRgiI6IDE1NSwKICAgICLQsyI6IDQwCi8vICAgICwiKyI6IDIKICB9LAogICJ1IjogewogICAgItC4IjogOTUsCiAgICAi0YciOiAzNSwKICAgICLQvSI6IDMwLAogICAgItGGIjogMjAsCiAgICAi0YMiOiAxNSwgICAgCiAgICAi0YsiOiAxMAogIH0sCiAgInYiOiB7CiAgICAi0LgiOiA4MCwKICAgICLRgyI6IDYwLAogICAgItGGIjogMzAsCiAgICAi0YciOiAzMAogIH0sCiAgInciOiB7CiAgICAi0YgiOiA4MCwKICAgICLRiSI6IDYwLAogICAgItC2IjogNDAsCiAgICAi0LwiOiAyMAogIH0sCiAgIngiOiB7CiAgICAi0YUiOiAyMDAKICB9LAogICJ5IjogewogICAgItGDIjogMjAwCiAgfSwKICAieiI6IHsKICAgICLQtyI6IDE2MCwKICAgICLRgSI6IDIwLAogICAgIjIiOiAxMAogIH0sCiAgIkEiOiB7CiAgICAi0JAiOiAxNzAsCiAgICAi0K8iOiAyMCwKICAgICI0IjogMTAKICB9LAogICJCIjogewogICAgItCSIjogMTUwLAogICAgItCRIjogMjAsCiAgICAiOCI6IDIwLAogICAgIjYiOiAxMAogIH0sCiAgIkMiOiB7CiAgICAi0KEiOiAxODYsCiAgICAi0IQiOiAyMCwKICAgICI2IjogNwogIH0sCiAgIkQiOiB7CiAgICAi0J4iOiA4MCwKICAgICLQkiI6IDUwLAogICAgIjAiOiA1MCwKICAgICLQriI6IDEwLAogICAgItCgIjogMTAKICB9LAogICJFIjogewogICAgItCVIjogMTUwLAogICAgItCBIjogNDAsCiAgICAi0IQiOiAyNQogIH0sCiAgIkYiOiB7CiAgICAi0JMiOiAxMzAsCiAgICAiUCI6IDMwLAogICAgItCVIjogNDAKICB9LAogICJHIjogewogICAgItCRIjogOTAsCiAgICAiNiI6IDkwLAogICAgItCEIjogNDAsICAgIAogICAgItCkIjogMTAsCiAgICAi0J4iOiAxMAogIH0sCiAgIkgiOiB7CiAgICAi0J0iOiAxNzAsCiAgICAi0JgiOiAyMCwKICAgICLQnyI6IDEwLAogIH0sCiAgIkkiOiB7CiAgICAiMSI6IDEwMCwKICAgICJJIjogOTAsCiAgICAiISI6IDQKICB9LAogICJKIjogewogICAgIjEiOiAzMCwKICAgICLQpyI6IDEwCiAgfSwKICAiSyI6IHsKICAgICLQmiI6IDIwMAogIH0sCiAgIkwiOiB7CiAgICAiTCIgOiAxNjAKICAgICwiSV8iOiA0MAogIH0sCiAgIk0iOiB7CiAgICAi0JwiOiAxNDAsCiAgICAi0KgiOiAzMCwKICAgICLQqSI6IDIwLAogICAgItCWIjogMTAKICB9LAogICJOIjogewogICAgItCYIjogMTAwLAogICAgItCdIjogODAsCiAgICAi0JkiOiAxMCwgICAgCiAgICAi0JwiOiAxMAogIH0sCiAgIk8iOiB7CiAgICAi0J4iOiAxMzAsCiAgICAiMCI6IDMwLAogICAgIlEiOiAzMywKICAgICI5IjogMiwKICAgICI4IjogMgogIH0sCiAgIlAiOiB7CiAgICAi0KAiOiAyMDAKICB9LAogICJRIjogewogICAgItCkIjogODAsCiAgICAi0J4iOiA3MCwKICAgICI5IjogMzAsCiAgICAi0K4iOiAyMAogIH0sCiAgIlIiOiB7CiAgICAi0KAiOiAxMDAsCiAgICAi0JoiOiAyMCwKICAgICLQryI6IDgwCiAgfSwKICAiUyI6IHsKICAgICLQlyI6IDEwMCwKICAgICLQoSI6IDUwLAogICAgIjgiOiAyMCwKICAgICI1IjogMzAKICB9LAogICJUIjogewogICAgItCiIjogMTUwLAogICAgItCTIjogMjUsCiAgICAiNyI6IDI1LAogIH0sCiAgIlUiOiB7CiAgICAiVSI6IDIwLAogICAgItCjIjogMTAwLAogICAgItCYIjogMzAsCiAgICAi0KYiOiAzMCwKICAgICLQpyI6IDEwCiAgfSwKICAiViI6IHsKICAgICLQoyI6IDEwMCwKICAgICLQmCI6IDYwLAogICAgItCmIjogMjAsCiAgICAiXC8iOiA3LCAgICAKICB9LAogICJXIjogewogICAgItCoIjogMTAwLAogICAgItCpIjogNjAsICAgIAogICAgItCWIjogNDAKICB9LAogICJYIjogewogICAgItClIjogMjAwCiAgfSwKICAiWSI6IHsKICAgICLQoyI6IDE5MCwKICAgICLQoiI6IDEwCiAgfSwKICAiWiI6IHsKICAgICIyIjogODAsCiAgICAi0JciOiA2MCwKICAgICI3IjogMzAsCiAgICAi0KEiOiAzMAogIH0KICAgICwwOiB7IjAiOjUsIkQiOjUsIk8iOjUsIlEiOjV9CiAgICAsMTogeyIxIjo1LCJsIjo1LCJJIjo1fQogICAgLDI6IHsiMiI6MSwiWiI6NX0KICAgICwzOiB7IjMiOjcsItCtIjo1fQogICAgLDQ6IHsiNCI6NywiQSI6NX0KICAgICw1OiB7IjUiOjEwLCJTIjo3fQogICAgLDY6IHsiNiI6MTAsItCxIjo3fQogICAgLDc6IHsiNyI6MTAsItCiIjo1LCLQkyI6NX0KICAgICw4OiB7IjgiOjEwLCJCIjo1LH0KICAgICw5OiB7IjkiOjEwLCJPIjoyLCLQryI6NX0KfQoKCmNvbnN0IGlzPXsKICAgICAgdm93ZWw6ICggIGNoYXIgICkgPT4gICAgaXMuc3Vic3RyKGNoYXIsItCw0L7RjdC40YPRi9C10ZHRjtGPMGFlb3VpIikKICAgICxsZXR0ZXI6ICggIGNoYXIgICkgPT4gIGNoYXIudG9Mb3dlckNhc2UoKSAhPSBjaGFyLnRvVXBwZXJDYXNlKCkKICAgICxudW1iZXI6ICggIGNoYXIgICkgPT4gIC9cZC8udGVzdChjaGFyKQogICAgLHN1YnN0cjogKGNoYXIsc3RyKSA9PiBudWxsPT1jaGFyID8gbnVsbCA6IHN0ci5pbmRleE9mKGNoYXIudG9Mb2NhbGVMb3dlckNhc2UoKSk+PTAgPyAxIDogMAp9CgpmdW5jdGlvbiB2b3JlZnkodGV4dCxzUHJvYikKewogICAgdmFyIHByZXYgPSBudWxsOwogICAgdmFyIHNlcSAgPSB7bGVuOiAwLCB2b3dlbDogMCwgcHJvYjpzUHJvYnx8WzEsOCwyMDAsMjAwLDIwMCwyMDBdfTsKICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoLy4vZywoY2hhcixvZmZzZXQsdGV4dCkgPT4gCiAgICB7CiAgICAgICAgaWYgKG51bGwhPUUyUltjaGFyXSl7CiAgICAgICAgICAgIGlmIChudWxsID09IHByZXYgfHwgaXMudm93ZWwocHJldikgIT0gc2VxLnZvd2VsKXsKICAgICAgICAgICAgICAgIHNlcS5sZW4gICA9IDA7CiAgICAgICAgICAgICAgICBzZXEudm93ZWwgPSBpcy52b3dlbChwcmV2KTsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgKytzZXEubGVuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmVwbGFjZSA9IE9iamVjdC5lbnRyaWVzKEUyUltjaGFyXSk7CiAgICAgICAgICAgIGlmICgxPT1yZXBsYWNlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgcHJldiA9IHJlcGxhY2VbMF1bMF07CiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIG1yICAgICAgICAgID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgICAgICAgdmFyIG1yVG90YWxQcm9iID0gMDsKICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgcmVwbGFjZSkgewogICAgICAgICAgICAgICAgaWYgKGlzLm51bWJlcihrKSl7CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bGw9PXByZXYpIG1yW2tdID0gdioyLjU7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBjb250aW51ZTsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIGlmIChudWxsPT1wcmV2ICYmIGlzLnN1YnN0cihrLCLRjNGK0YsiKSkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgbXJba10gPSB2OwogICAgICAgICAgICAgICAgICAgIGlmIChpcy52b3dlbChrKT09c2VxLnZvd2VsKSAgICAgbXJba10gLz0gc2VxLnByb2Jbc2VxLmxlbl07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBtclRvdGFsUHJvYiArPSBtcltrXTsKICAgICAgICAgICAgfSAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqbXJUb3RhbFByb2IsIHByb2JhYmlsaXR5PTA7CiAgICAgICAgICAgIGZvciAodmFyIG1rIGluIG1yKSB7CiAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eSArPSBtcltta107CiAgICAgICAgICAgICAgICBpZiAociA8PSBwcm9iYWJpbGl0eSkgewogICAgICAgICAgICAgICAgICAgIHByZXYgPSBtazsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwcmV2ID0gbnVsbDsKICAgICAgICByZXR1cm4gY2hhcjsKICAgIH0pOyAgICAgICAgCn0KCmNvbnNvbGUubG9nKHZvcmVmeShgI2luY2x1ZGUgPG5ldz4KCnRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4KYXV0byByZXBsYWNlKExocyAqbGhzLCBSaHMpIHsKICByZXR1cm4gKm5ldyAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obGhzKSkgUmhze307Cn0KCmludCBtYWluKCkgewogIGF1dG8gZjEgPSAmYWRkOwogIGF1dG8gZjIgPSByZXBsYWNlKGFkZCwgW10oaW50IGEsIGludCBiKSB7IHJldHVybiBhIC0gYjsgfSk7CgogIGYxKDQsIDIpOwogIGYyKDQsIDIpOwp9CgoKCmJ5IDo6IEludCAtPiBbYV0gLT4gW1thXV0KYnkgXyBbXSA9IFtdCmJ5IG4geHMgPSB0YWtlIG4geHM6IGJ5IG4gKGRyb3AgbiB4cykKIAp3b3JkczIgOjogU3RyaW5nIC0+IChTdHJpbmcsIFN0cmluZykKd29yZHMyIHN0ciA9IGNvbmMgJCB3b3JkcyBzdHIgd2hlcmUKICAgIGNvbmMgKHg6eHMpID0gKHgsIGNvbmNhdCB4cykKIApncm91cFRlbXBsYXRlcyA6OiBTdHJpbmcgLT4gWyhTdHJpbmcsIFN0cmluZyldCmdyb3VwVGVtcGxhdGVzIHhzID0gbWFwICh3b3JkczIpIChsaW5lcyB4cykKIApkZWNvZGVPbmUgOjogU3RyaW5nIC0+IFsoU3RyaW5nLCBTdHJpbmcpXSAtPiBTdHJpbmcKZGVjb2RlT25lIF8gW10gPSAiIgpkZWNvZGVPbmUgc3RyICh4OnhzKSB8IHN0ciA9PSBmc3QgeCA9IGZzdCB4ICsrICIgIiArKyBzbmQgeCArKyAiXG4iCmRlY29kZU9uZSBzdHIgKF86eHMpID0gZGVjb2RlT25lIHN0ciB4cwogCmRlY29kZSA6OiBbU3RyaW5nXSAtPiBbKFN0cmluZywgU3RyaW5nKV0gLT4gU3RyaW5nCmRlY29kZSBicyB0cyA9IGNvbmNhdCAkIG1hcCAoXGIgLT4gZGVjb2RlT25lIGIgdHMpIGJzCiAKbWFpbiA9IGRvCiAgICBiaXRzICAgICAgPC0gcmVhZEZpbGUgImJpdHMudHh0IgogICAgdGVtcGxhdGVzIDwtIHJlYWRGaWxlICJ0ZW1wbGF0ZXMudHh0IgogCiAgICB3cml0ZUZpbGUgIm91dC50eHQiICQgZGVjb2RlIChieSA0IGJpdHMpIChncm91cFRlbXBsYXRlcyB0ZW1wbGF0ZXMpCmApKTs=