कोड की कुछ पंक्तियों के रूप में ROT13 सिफर - जावास्क्रिप्ट

मैंने एक समारोह लिखा है जहां प्राप्त स्ट्रिंग में अक्षरों के मान 13 स्थानों द्वारा स्थानांतरित किए जाते हैं।

मेरा समाधान अत्यधिक अक्षम है और शिफ्ट कारक बदल दिया गया था और पूरी तरह से फिर से लिखने की आवश्यकता होगी।

मेरा समाधान यहाँ है:

function rot13(str) {
var charArray = str.split("");
var myArray = [];

for (var i = 0; i < charArray.length; i++) {
switch (charArray[i]) {

case "A":
myArray.push("N");
break;

case "B":
myArray.push("O");
break;

case "C":
myArray.push("P");
break;

case "D":
myArray.push("Q");
break;

case "E":
myArray.push("R");
break;

case "F":
myArray.push("S");
break;

case "G":
myArray.push("T");
break;

case "H":
myArray.push("U");
break;

case "I":
myArray.push("V");
break;

case "J":
myArray.push("W");
break;

case "K":
myArray.push("X");
break;

case "L":
myArray.push("Y");
break;

case "M":
myArray.push("Z");
break;

case "N":
myArray.push("A");
break;

case "O":
myArray.push("B");
break;

case "P":
myArray.push("C");
break;

case "Q":
myArray.push("D");
break;

case "R":
myArray.push("E");
break;

case "S":
myArray.push("F");
break;

case "T":
myArray.push("G");
break;

case "U":
myArray.push("H");
break;

case "V":
myArray.push("I");
break;

case "W":
myArray.push("J");
break;

case "X":
myArray.push("K");
break;

case "Y":
myArray.push("L");
break;

case "Z":
myArray.push("M");
break;

case " ":
myArray.push(" ");
break;

case ",":
myArray.push(",");
break;

case "!":
myArray.push("!");
break;

case "?":
myArray.push("?");
break;

case ".":
myArray.push(".");
break;
}
}



console.log(myArray.join(""));

}
rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.");

क्या आप मुझे एक अधिक कुशल कम बोझिल समाधान दिखा सकते हैं?

उत्तर:

जवाब के लिए 2 № 1

यहां किसी भी (सकारात्मक) रोटेशन वैल्यू और अन्य प्रतिस्थापन की एक तालिका में जाने की क्षमता के साथ एक संभावित कार्यान्वयन है। ES6 में लिखा गया है।

function rotn(str, rotation = 13, map = {}) {
const table = {};  // New table, to avoid mutating the parameter passed in
// Establish mappings for the characters passed in initially
for (var key in map) {
table[map[key]] = key;
table[key] = map[key];
}
// Then build the rotation map.
// 65 and 97 are the character codes for A and a, respectively.
for (var i = 0; i < 26; i++) {
table[String.fromCharCode(65 + i)] = String.fromCharCode(65 + (i + rotation) % 26);
table[String.fromCharCode(97 + i)] = String.fromCharCode(97 + (i + rotation) % 26);
}

return str.split("").map((c) => table[c] || c).join("");
}


console.log(rotn("Gur dhvpx oebja Qbt whzcrq bire gur ynml Sbk.", 13, {".": "!"}));

उत्तर № 2 के लिए 1

कम फ़ंक्शन का उपयोग करके यहां एक उदाहरण दिया गया है:

function rot13(str) {
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
return str.split("").reduce(function(a, b) {
if (chars.indexOf(b) == -1) {
return a + b;
}
return a + chars[(chars.indexOf(b)+13) % chars.length]
}, "");
}

console.log(rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK."));


संबंधित सवाल
सबसे लोकप्रिय