加密...几乎有效

时间:2017-02-10 02:26:52

标签: javascript arrays algorithm

我为一个名为Codewars的网站写了一个简单的脚本(这里是https://www.codewars.com/kata/57814d79a56c88e3e0000786)。该函数的目的是加密一个字符串,使每个第二个字符首先出现,然后是其余字符。我测试了很多随机的文本字符串;它工作了一段时间。但后来,我测试了一个包含17个字符的特定案例:"maybe do i really",这导致一个字符被删除(特别是一个空格)。最初,我认为问题是.join方法没有允许连续的双空格,所以我试图创建自己的函数来模仿它的功能:它没有解决问题。任何人都可以回答为什么这个特定字符串丢失一个字符并返回错误的加密?我的jsfiddle在这里:https://jsfiddle.net/MCBlastoise/fwz62j2g/

编辑:我忽略了提到它基于参数n运行了一定次数,每个值加密字符串多次。

我的代码在这里:



function encrypt(text, n) {
	if (n <= 0 || isNaN(n) === true || text === "" || text === null) {
		return text;
	}
	else {
		for (i = 1; i <= n; i++) {
			if (i > 1) {
				text = encryptedString;
			}
			var evenChars = [];
			var oddChars = [];
			for (j = 0; j < text.length; j++) {
				if (j % 2 === 0) {
					evenChars.push(text.charAt(j));
				}
				else {
					oddChars.push(text.charAt(j));
				}
			}
			var encryptedString = oddChars.join("") + evenChars.join("");
		}
		return encryptedString;
	}
}

function decrypt(encryptedText, n) {
	if (n <= 0 || encryptedText === "" || encryptedText === null) {
		return encryptedText;
	}
	else {
		for (i = 1; i <= n; i++) {
			if (i > 1) {
				encryptedText = decryptedString;
			}
			var oddChars = [];
			var evenChars = [];
			for (j = 0; j < encryptedText.length; j++) {
				if (j < Math.floor(encryptedText.length / 2)) {
					oddChars.push(encryptedText.charAt(j));
				}
				else {
					evenChars.push(encryptedText.charAt(j));
				}
			}
			var convertedChars = []
			for (k = 0; k < evenChars.length; k++) {
				convertedChars.push(evenChars[k]);
				convertedChars.push(oddChars[k]);
			}
			var decryptedString = convertedChars.join("");
		}
		return decryptedString;
	}
}
document.getElementById("text").innerHTML = encrypt("maybe do i really", 1);
document.getElementById("text2").innerHTML = decrypt("ab oiralmyed ely", 1)
&#13;
<p id="text"></p>
<p id="text2"></p>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:3)

代码本身没有错。基本上HTML不允许2个或更多空格。对于这种情况,您可以使用[1] [HPM] GET /WorkLocation/EditList/111014/73442 -> http://localhost/Perform/Company/WorkLocation [1] 17.02.09 20:44:09 404 GET /WorkLocation/EditList/111014/73442 标记。

<pre>