сжал 531 байт

ните это сообщение о цели, в котором говорилось:

Приезжая на поиски в Cmabrigde Uinervtisy, он не имеет ничего общего с тем, какой он есть, и который находится на первом месте. Rset может быть очень полезен, и вы можете читать его без изменений. Это слово не только не из-за истерики, но и изредка.

Во всяком случае, я пытаюсь сделать функцию, которая будет делать это для всей страницы. Есть несколько правил для этой функции.

Менее 4 символов оставить в покое.не буквенно-цифровые символы не считаются частью слова.дефисные слова на самом деле два словаслова должны быть искажены, если длина> = 4 (не может быть как оригинал)Первый и последний символы остаются прежними, и только средние символы искажаются (спасибо Хершизи)текст всегда должен быть случайным и вызывать уникальное искажение при каждом запускеЧистый JavaScript и повторяется на всех текстовых узлахСамый короткий сладкий код выигрывает.

В любом случае, это кажется достаточно простым для реализации, как насчет того, чтобы начать соревнование, чтобы увидеть, кто может сделать самый чистый и понятный код для выполнения этой задачи. Не стесняйтесь заимствовать без распознавания из моего кода (у меня есть)

Если я что-то пропустил, добавьте это в комментарии. Во всяком случае, я работал над этим очень хакерски, и вот я показываю свою менее чем номинальную работу

DEMO

var i, j, words, textNodes, punct = /[^a-zA-Z0-9]/;

Array.prototype.shuffle = function() {
    for (var i = 0; i < this.length; i++) {
        var j = i;
        while (j == i) {
            j = Math.floor(Math.random() * this.length);
        }
        var tmp = this[i];
        this[i] = this[j];
        this[j] = tmp;
    }
    return this;
};

String.prototype.shuffle = function() {
    return this.split('').shuffle().join('');
};

function transverse(element, array) {
    if (!array) array = [];
    if (element.nodeType === 3) {
        array.push(element);
    } else {
        for (var i = 0; i < element.childNodes.length; i++) {
            transverse(element.childNodes[i], array);
        }
    }
    return array;
}

function garble(str) {
    if (!str) return '';
    str = str.trim();
    if (/-/.test(str)) {
        str = str.split('-');
        for (var i = 0; i < str.length; i++) {
            str[i] = garble(str[i]);
        }
        return str.join('-')
    }
    if (punct.test(str.charAt(0))) {
        return str.charAt(0) + garble(str.slice(1));
    }
    if (punct.test(str.charAt(str.length - 1))) {
        return garble(str.slice(0, -1)) + str.charAt(str.length - 1);
    }
    if (str.length < 4) return str;
    if (str.length === 4) return str.charAt(0) + str.charAt(2) + str.charAt(1) + str.charAt(3)
    return str.charAt(0) + str.substr(1, str.length - 2).shuffle() +
        str.charAt(str.length - 1);
}


window.onload = function() {
    textNodes = transverse(document.documentElement);
    for (i = 0; i < textNodes.length; i++) {
        words = textNodes[i].data.split(' ');
        for (j = 0; j < words.length; j++) {
            words[j] = garble(words[j]);
        }
        textNodes[i].data = words.join(' ');
    }
};

Ответы на вопрос(4)

Ваш ответ на вопрос