请记住那条关于目标的客场消息,上面写着如何:
对 Cmabrigde Uinervtisy 的一名研究人员来说,这并不意味着所有的事情都是一样的,所有的 iprmoetnt tihng 是第一个和 lsat ltteer 是在 rghit pclae。rset 可以是一个 toatl mses,你可以在没有 porbelm 的情况下使用它。Tihs is bcuseae the huamn mnid deos 不是 raed ervey lteter by istlef,而是 wrod as a wlohe。
无论如何,我正在尝试制作一个可以对整个页面执行此操作的功能。这个函数有一些规则。
- 少于 4 个字符不要理会。
- 非字母数字字符不算作单词的一部分。
- 连字符真的是两个词
- 如果长度> = 4,单词必须是乱码(不能像原来的那样)
- 第一个和最后一个字符保持不变,只有中间的字符会乱码(感谢 Hersheezy)
- 文本应始终是随机的,并在每次运行时产生独特的乱码
- 纯 javascript 并在所有文本节点上迭代
- 最短最甜的代码获胜。
无论如何,它似乎很容易实现,如何开始一场比赛,看看谁能写出最干净最清晰的代码来完成这项任务。随意借用而不识别我的代码(我肯定有)
如果我错过了什么,请在评论中添加。无论如何,我非常笨拙地工作,这是我展示我的低于标准的工作
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(' ');
}
};