Цитата(MustLive @ 30.11.2009 - 19:10)

Ну и алгоритм программы у тебя более сложный, чем простая перестановка (хотя в основном используется именно перестановка букв).
В общем да. Суть взята из этого давно известного "исследования". Но захотелось написать конвертер самому и посмотреть на результаты.
Получилось, что если оставлять только первую и последнюю буквы, то распознать текст ОЧЕНЬ сложно. Поэтому я оставляю костяк (половину букв), а то что между ними - перемешиваю. После этого в редких случаях добавляю или удаляю какую-нибудь букву.
Как-то так

Кстати, очень похоже, что эти "исследования английского университета" тоже не тотально перемешивали буквы.
На коленке это было сделано так:
Код
onMouseDown=function(){
ot.text=convertTo(it.text)
}
// ot - динамическое поле вывода
// it - поле ввода
function convertTo(txt){
var arrText0=txt.split(" ")
for (var i=0; i<arrText0.length; i++){
var word=arrText0[i]
if (word.length>3) {
var ix0=1
for (var ixk=word.length-1; ixk>ix0; ixk--){
if ((word.charCodeAt(ixk)>64 && word.charCodeAt(ixk)<91) || (word.charCodeAt(ixk)>96 && word.charCodeAt(ixk)<123) || (word.charCodeAt(ixk)>1039 && word.charCodeAt(ixk)<1104)) break
}
if ((ixk-ix0)<2) continue // нет пространства для перемешивания букв
var txt1=word.substring(ix0,ixk) // перемешиваемая область
txt1=f_break(txt1)
arrText0[i]=word.substring(0,1)+txt1+word.substring(ixk)
}
}
return arrText0.join(" ")
}
function f_break(txt){
var arrTxt=[]
var strToChange=""
for (var i=0; i<txt.length; i++){
if (i%2) {
arrTxt[i]=null
strToChange+=txt.charAt(i)
} else {
arrTxt[i]=txt.charAt(i)
}
}
var arrFromChange=f_change(strToChange).split("")
for (var i=0; i<arrTxt.length; i++){
if (arrTxt[i]==null) arrTxt[i]=arrFromChange.shift()
}
var endText=arrTxt.join("")
var rnd=random(100)
switch (rnd){
case 0:
arrTxt.splice(random(arrTxt.length),1) // случайно удаляем один символ
endText=arrTxt.join("")
break;
case 1:
var letter=String.fromCharCode(random(1169)-65)
var idx=random(arrTxt.length)
endText=endText.substring(0,idx)+letter+endText.substring(idx)
}
return endText
}
function f_change(txt){
var arrText0=txt.split("")
var arrText2=[]
while(arrText0.length){
arrText2.push(arrText0.splice(random(arrText0.length),1)[0])
}
return arrText2.join("")
}