JS.14 · Строки
Задача
Зашифровать текст сдвигом и расшифровать обратным сдвигом.
Алгоритм
replace с регуляркой обрабатывает каждую букву, сдвигая её код по кольцу из 26 символов.
Исходный код
// Шифр Цезаря
function caesar(s, k) {
return s.replace(/[a-z]/gi, c => {
const base = c <= 'Z' ? 65 : 97;
return String.fromCharCode((c.charCodeAt(0) - base + k + 2600) % 26 + base);
});
}
const enc = caesar('Hello, Radio', 3);
console.log('шифр: ', enc);
console.log('дешифр:', caesar(enc, -3));
Пояснения
Добавка 2600 (кратна 26) держит аргумент остатка положительным при отрицательном сдвиге.