Шифр ROT13 — это простой метод шифрования, при котором каждая буква в сообщении заменяется буквой, которая находится на 13 позиций впереди нее в алфавите. Например, буква «А» заменяется на букву «Н», буква «В» заменяется на букву «О» и так далее.

Несмотря на то, что это слабый метод шифрования, ROT13 по-прежнему используется сегодня в различных ситуациях, например, на онлайн-форумах, чтобы скрыть спойлеры, или в компьютерном программировании, чтобы скрыть конфиденциальную информацию.

ROT13 называют шифром «ROT», потому что он «вращает» алфавит на 13 позиций. Его также называют шифром Цезаря, потому что Юлий Цезарь использовал его для шифрования своих сообщений во время войн.

Итак, давайте продолжим и воспользуемся методами древних!!!! Начну выписывать код по крупицам, т.е. только последний блок кода будет включать полную функцию. Если вы учитесь, то это будет хорошим упражнением для практики написания алгоритмов.

function rot13(message){
  //your code here

  let cipher = '';
  let rot;
  
  for (let i = 0; i < message.length; i++) {
    
       rot = message.charCodeAt(i);

поэтому для начала мы собираемся объявить пустую строку, в которую мы будем вводить окончательный результат, поэтому она называется cypher и другая переменная с именем rot. Как видите, мы начали с цикла и метода charCodeAt(), который представляет собой функцию JavaScript, возвращающую значение Unicode символа по указанному индексу в строке. Чтобы лучше понять значения Unicode, ознакомьтесь с этой таблицей прямо здесь.

function rot13(message){
  let cipher = '';
  let rot;
  
  for (let i = 0; i < message.length; i++) {
    rot = message.charCodeAt(i);
    
    if (rot >= 65 && rot <= 90) {
      cipher += String.fromCharCode((rot - 65 + 13) % 26 + 65);

хорошо, теперь это начинает становиться немного сложным, если вы обратитесь к ссылке на диаграмму Unicode, которую я разместил ранее, вы увидите, что от 65 до 90 — это все заглавные буквы, шифр — это шифр замены, который заменяет его другими буквами. String.fromCharCode() — это функция, которая сделает это, но вы просто не можете добавить 13. Если у вас есть такая буква, как P, которая равна 80 в Unicode, например, добавление 13 даст вам закрытую скобку ], потому что это 93 в Unicode, и если, когда мы считаем до следующих 13 букв, и он проходит через букву Z, мы хотим вернуться назад и закончить счет от A, пока не дойдем до 13-й буквы.

поскольку здесь мы заменяем только буквы, мы устанавливаем оператор if для выполнения шифра, если ввод имеет значения Unicode от 65 до 90 (A-Z). мы вычитаем 65, чтобы получить число от 0 до 25, после чего добавляется 13. Затем, чтобы убедиться, что если мы пройдем мимо буквы Z, когда мы добавляем 13, мы используем оператор остатка, чтобы получить остаток, разделив на 26 число буквы в алфавите и, наконец, мы снова добавляем 65, чтобы получить новую букву, которую мы будем заменять.

function rot13(message){
  let cipher = '';
  let rot;
  
  for (let i = 0; i < message.length; i++) {
    rot = message.charCodeAt(i);
    
    if (rot >= 65 && rot <= 90) {
      cipher += String.fromCharCode((rot - 65 + 13) % 26 + 65);
    } else if (rot >= 97 && rot <= 122) {
      cipher += String.fromCharCode((rot - 97 + 13) % 26 + 97);
    } 

этот оператор else if делает то же самое, но для диапазона Unicode от 97 до 122, который является диапазоном номеров Unicode для нижнего регистра az.

function rot13(message){
  let cipher = '';
  let rot;
  
  for (let i = 0; i < message.length; i++) {
    rot = message.charCodeAt(i);
    
    if (rot >= 65 && rot <= 90) {
      cipher += String.fromCharCode((rot - 65 + 13) % 26 + 65);
    } else if (rot >= 97 && rot <= 122) {
      cipher += String.fromCharCode((rot - 97 + 13) % 26 + 97);
    } else {
      cipher += message.charAt(i);
    }
  }
  
  return cipher;
}

console.log(rot13('Test')); // Output: Grfg

Затем мы добавляем еще один оператор else, чтобы, если строка содержит символ, выходящий за пределы этих двух диапазонов Unicode, она просто возвращалась как есть, поскольку Rot13 предназначен только для использования с буквами. И напоследок возвращаем шифр.