#javascript
Не могу понять почему не работает 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Ответы
Ответ 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!"));Ответ 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 (кол-во букв в половине алфавита) и получаем "параллельную" букву, и наоборот, если буква из второй части алфавита.
Комментариев нет:
Отправить комментарий