本文介绍了功能竞赛的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 请记住,目标上的消息说明如何:Remember that away message on aim that said how:无论如何我试图制作一个能够完成整个页面的功能。此功能有一些规则。Anyway I'm trying to make a function that would do that to an entire page. There are a few rules for this function. 少于4个字符。 non - 字母数字字符不算作单词的一部分。 带连字符的单词实际上是两个单词 如果长度> = 4,单词必须变为乱码(不能像原版一样) 第一个和最后一个字符保持不变,只有中间字符变得乱码(谢谢Hersheezy) 文本应该始终是随机的,并且每次运行都会产生独特的混乱。 纯javascript并在所有文本节点上进行迭代 最甜蜜的代码获胜。less then 4 characters leave alone.non-alphanumeric characters don't count as part of the word.hyphenated words are really two wordswords must get garbled if length >= 4 (can't be like the original)The first and last chars stay the same and only the middle chars get garbled (Thanks Hersheezy)the text should always be random and produce unique garbling on each runPure javascript and iterates on all text nodesShortest sweetest code wins.无论如何,它实现起来似乎很简单,如何开始一场比赛,看谁能够制作最干净,最清晰的代码来完成这项任务。在没有我的代码识别的情况下随意借用(我没有)Anyway it seems simple enough to implement, how's about starting a contest to see who could make the cleanest clearest code to accomplish this task. Feel free to borrow without recognition from my code (I def have)如果我错过任何内容,请在评论中添加。无论如何,我非常狡猾地工作,这是我表现出我不太好的工作If i missed anything add it in the comments. Anyway I worked on it very hackishly and here's me showing my less than par work DEMODEMOvar 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(' '); }};推荐答案 更新(最新) :不要认为它可以变得更小.. DEMO 最新压缩(332):UPDATE( LATEST ): Don't think it can get any smaller.. DEMOLatest compressed (332):var e=document.body.getElementsByTagName('*'),j,i,l,x,t,b;for(i=0;e[i];i++)for(j=0;b=e[i].childNodes[j];j++)if(b.nodeType==3)b.data=b.data.replace(/\w{4,}/g,function(w){if(/(^.)(\1)+$/.test(x=w.substring(1,l=w.length-1)))return w;t=w;while(t==w)t=w[0]+x.split('').sort(function(){return 0.5-Math.random()}).join('')+w[l];return t});代码:var e = document.body.getElementsByTagName('*'), j, i, l, x, t, b;for (i = 0; e[i]; i++)for (j = 0; b = e[i].childNodes[j]; j++)if (b.nodeType == 3) b.data = b.data.replace(/\w{4,}/g, function(w) { if (/(^.)(\1)+$/.test(x = w.substring(1, l = w.length - 1))) return w; t = w; while (t == w) t = w[0] + x.split('').sort(function() { return 0.5 - Math.random(); }).join('') + w[l]; return t;}); 更新甚至..较小.. Even较小的版本 我不知道你使用的缩小器,但这必须至少( EDIT 108)字节更小。 压缩版本(365字节):Even smaller versionI dont know the minifier your using, but this must be at least (EDIT 108) bytes smaller.compressed version (365 bytes):var e=document.body.getElementsByTagName('*'),a=[],c,j,i,l,x,t,b;for(i=0;c=e[i];i++)for(j=0;b=c.childNodes[j];j++)if(b.nodeType==3){b.data=b.data.replace(/\b[a-z0-9]{4,}\b/gi,function(w){if(/(^.)(\1)+$/.test(x=w.substring(1,l=w.length-1)))return w;t=w;while(t==w)t=w[0]+x.split('').sort(function(){return Math.floor(Math.random()*2)?1:-1}).join('')+w[l];return t})}代码:var e = document.body.getElementsByTagName('*'), a = [], c, j, i, l, x, t, b;for (i = 0; c = e[i]; i++)for (j = 0; b = c.childNodes[j]; j++)if (b.nodeType == 3) { b.data = b.data.replace(/\b[a-z0-9]{4,}\b/gi, function(w) { if (/(^.)(\1)+$/.test(x = w.substring(1, l = w.length - 1))) return w; t = w; while (t == w) t = w[0] + x.split('').sort(function() { return Math.floor(Math.random() * 2) ? 1 : -1; }).join('') + w[l]; return t; });} 编辑 新规则演示 代码:EDIT NEW RULES DEMOCODE:var fn = function(e) { var ret = [],c; for (var i = 0; i < e.length; i++) { c = e[i].childNodes; for (var j = 0; j < c.length; j++) if (c[j].nodeType === 3) ret.push(c[j]); } return ret;};var es = fn(document.body.getElementsByTagName('*'));for (var i = 0; i < es.length; i++) { var e = es[i],len,x; e.data = e.data.replace(/\b[a-z0-9]{4,}\b/gi, function(w) { if (/(^.)(\1)+$/.test(x = w.substring(1, len = w.length - 1))) return w; var tmp = w; while (tmp === w) { tmp = w[0] + x.split('').sort(function() { return Math.floor(Math.random() * 2) ? 1 : -1; }).join('') + w[len]; } return tmp; });}这应该遵守所有规则,并保持格式和标点符号。 DEMOThis should respect all the rules, and keep format and punctuation. DEMO//select all nodes in document and perform map on it to filter out//non text node types, then each one of those elements is processed.$('*').contents().map(function(i, elem) { if (elem.nodeType !== 3) return null; else return elem;}).each(function(i, elem) { //call strip funciton defined down to get an object, with a word array, and //charecters which was stripped along with there index in the orginal string var str1 = '', tmp = strip(elem.data), words = tmp.words, sentence; // shuffle all words words = $.map(words, function(x, i) { return shuffle(x); }); //construct raw sentence (non alphanumeric charecters) sentence = words.join(''); //reinsert spaces and punctiouation $.each(tmp.chars, function(i, elem) { sentence = sentence.substring(0, elem.index) + elem.char + sentence.substring(elem.index - 1 + elem.char.length); }); //set the element text elem.data = sentence;});//shuffle funciton takes a word and shuffle the charecters between the last and the firtfunction shuffle(txt) { //if the word is smaller than 4 charecters or it has repeated charecters in //its middle (i.e. loop, 'oo' cannot be shuffled!) then return it; if (txt.length < 4 || /(^.)(\1)+$/.test(txt.substring(1, txt.length - 1))) return txt; var str = txt.split(''), ret = [], rand, x = 0, tmp = txt; //while the txt hasn't changed in the first randomization cycle then repeated while (txt === tmp) { ret = []; $.each(str, function(i, c) { if (i === str.length - 1 || i === 0) { ret[i] = c; return; } while (true) { rand = Math.floor(Math.random() * (str.length - 2) + 1); if (!ret[rand]) { ret[rand] = c; break; } } }); tmp = ret.join(''); } return ret.join('');}function strip(txt) { var punc = /[^A-Za-z0-9]/g, res, nonAlphaNum = [], arr; //punc regex is all non-alphanumeric charecters which will act on the string //to point out unwanted charecters and store them in an array along with //their index while ((res = punc.exec(txt)) != null) { nonAlphaNum.push({ index: res.index, char: res[0] }); } //split into words arr = txt.split(/\s/); //remove punctiuation and other unwanted chars arr = $.map(arr, function(x, i) { return x.replace(punc, ''); }); return { words: arr, //words array chars: nonAlphaNum //array of stripped charecter objects (chars, index in orginal) };} btw文章的不错选择,WWiWieikikb !!btw nice choice of the article, WWiWieikikb!! 这篇关于功能竞赛的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-22 17:22