Заменить буквы в слове JS

194
02 декабря 2018, 04:00

Не могу понять почему не работает replace, задача с freecodecamp(дана фраза, в словах которой, буквы из первой половины алфавита нужно заменить на буквы второй половины алфавита соответственно т.е А=N, B=O и т.д), все решения связанные с этой задачей были через charCodeAt(),можно ли вообще решить эту задачу через replace?

function rot13(str) { 
   const alfabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   const half1 = alfabet.split('');
   // ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M"]
   const half2 = half1.splice(0,13);
//    ["N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
   const myStr = str.split(' ');
   for(let myShifrWords of myStr){
       for(let i=0; i<myShifrWords.length;i++){
           let e = myShifrWords[i];
           function repl(e){
             if(half1.indexOf(e)!==-1){
                 return half1[half2.indexOf(e)];
                } else if(half2.indexOf(e)!==-1){
                 return half2[half1.indexOf(e)]
                }
            }
return myShifrWords.replace(e, repl);
       }
   }
}
rot13("SERR CVMMN!")
Answer 1

function rot13(str) { 
  var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
  var map = Object.create(null); 
 
  for (var q = 0; q < alphabet.length; ++q) { 
    map[alphabet[q]] = alphabet[(q + 13) % alphabet.length]; 
  } 
 
  return str.replace(/./g, m => map[m] || m); 
} 
 
console.log(rot13("SERR CVMMN!"));

Answer 2

А можно ещё и так.

function replace(str) { 
  return str.replace(/[A-Z]/gi, function(letter) { 
    var c = letter.charCodeAt(0); 
    return String.fromCharCode((c - 65 >= 13) ? c - 13 : c + 13); 
  }); 
} 
 
console.log(replace("SERR CVMMN!"));

Короткое описание: берём букву из нужного слова, смотрим в какой она части алфавита (в первой или второй), если первая - по коду ASCII таблицы прибавляем 13 (кол-во букв в половине алфавита) и получаем "параллельную" букву, и наоборот, если буква из второй части алфавита.

READ ALSO
How to make SQL query to select unique id and range them in columns by date?

How to make SQL query to select unique id and range them in columns by date?

Помогите сделать SQL запрос на выборку id, отсортированных по дате от 0101

201
из с++ в mysql передача данных

из с++ в mysql передача данных

Есть БД на локалхосте (запускаю через xampp, mysql)В базе присутствует кириллица

168
Не получается отцентрировать меню

Не получается отцентрировать меню

Стал не нужен блок поиска на сайте, пришлось убрать, а меню съехало в право и не хочет центрироватьсяПодскажите в чем проблема пожалуйста

234
Как использовать StringBuilder для нескольких элементов? Jsoup

Как использовать StringBuilder для нескольких элементов? Jsoup

Есть код для парсинга и внесения некоторых изменений в выводимый текст:

178