Caesars Cipher_What am I missing?

Caesars Cipher_What am I missing?
0

#1

Hello! This is my first post in this forum. I just started to code a couple of months ago. I hope someone can help me. In this chalange (Caesars Cipher) I can’t figure out the last step… I found all the others algorithms pretty easy but I am really stuck on this one.

Here is my code for now:

``````function rot13(str) { // LBH QVQ VG!
var arr = [];
for (i=0; i< str.length; i++) {
if (str.charCodeAt(i) > 64 && str.charCodeAt(i) < 91) {
if (str.charCodeAt(i) -13 < 65) {
arr.push(str.charCodeAt(i) -13 + 26);
} else {
arr.push(str.charCodeAt(i) -13);
}
} else {
arr.push(str.charCodeAt(i));
}
}
console.log(arr);

//how to do this last step...?
//var finalStr = String.fromCharCode(arr???);
return finalStr;
}

// Change the inputs below to test
rot13("SERR PBQR PNZC");
``````

Thank you!

#2

Well… I think I’ve just solved it! (Finally!) But probably there is a really better way.

``````function rot13(str) { // LBH QVQ VG!
var arr = [];
for (i=0; i< str.length; i++) {
if (str.charCodeAt(i) > 64 && str.charCodeAt(i) < 91) {
if (str.charCodeAt(i) -13 < 65) {
arr.push(str.charCodeAt(i) -13 + 26);
} else {
arr.push(str.charCodeAt(i) -13);
}
} else {
arr.push(str.charCodeAt(i));
}
}

var newArr = [];
for (i=0; i< arr.length; i++) {
newArr.push(String.fromCharCode(arr[i]));
}

var finalStr = newArr.join("");
return finalStr;
}

rot13("SERR PBQR PNZC");``````

#3
1. Maybe instead of subtracting 13 and adding 26 you can just add 13 in line 6.

2. Then you could simplify by removing the if - else from line 5 to 8.

3. Does this below work for you?

``````         var arr = [];
for (i=0; i< str.length; i++)
{
if (str.charCodeAt(i) < 65 || str.charCodeAt(i) > 90)
{
arr.push(str.charCodeAt(i)); // Return un-converted
} else if (str.charCodeAt(i) < 78)
{
arr.push(str.charCodeAt(i) + 13); //Simply add 13
} else
{
arr.push(str.charCodeAt(i) - 13); //Simply remove 13
}
}

var newArr = [];
for (i=0; i< arr.length; i++) {
newArr.push(String.fromCharCode(arr[i]));
}

var finalStr = newArr.join("");
return finalStr;``````

#4

Oh, yes! That second point simplifies it a bit! Thank you for your answer!