@vitas1693

Как написать функцию шифрования методом подстановки encode?

Допишите функцию шифрования методом подстановки encode(text, openAlph, secureAlph).

Аргументы функции encode:
text - текст, который нужно зашифровать
openAlph - открытый алфавит
secureAlph - шифрованный алфавит
Возвращаемое значение — строка (зашифрованный текст).

Для шифрования необходимо каждый символ открытого алфавита заменять соответствующим символом закрытого алфавита. Если в тексте встречаются небуквенные символы, то их нужно оставлять без изменения.

Например:
encode(
"message",
"abcdefghijklmnopqrstuvwxyz",
"rsyxuqldnmzvpofceiwktjgabh",
); // должен вернуть "puwwrlu"

function encode(text, openAlph, secureAlph) {
  let result = "";

  return result;
}


Третий день сижу, в поисках решения, похожих не нашел к сожалению на форуме.
Подскажите пожалуйста с чего начать решение, как я понял логику функции.... нужно разбить посимвольно сообщение "text", затем этот символ найти в открытом алфавите и определить его id и заменить на символ с таким же id только шифрованного алфавита и записать допустим в массив его, но как это реализовать не знаю.
  • Вопрос задан
  • 441 просмотр
Решения вопроса 2
@AbramovKS
function encode(text, openAlph, secureAlph) {
    let result = ""
    text = text.split("") //превращаем строку в массив
     text.forEach(char => { //бежим по массиву
        let upper = false
        if(char != char.toLowerCase()){ //превращаем в строчную и запоминаем
            upper = true
            char = char.toLowerCase()
        }
        
        if(char.match(/^[A-Za-z]$/)){ 
            let oIndex = openAlph.indexOf(char) //индекс в открытом алфавите алфавите
            if( oIndex == -1){ //если индекс не нашелся
                throw new Error('Не найден символ "'+char+'" в открытом алфавите'); 
            } 
            if( !secureAlph[oIndex] ){
                throw new Error('Не найден индекс "'+oIndex+'" в закрытом алфавите'); 
            }
            char = secureAlph[oIndex] //по индексу берем букву в закрытом алфавите 
        } 
        if(upper){
            char = char.toUpperCase()
        }
        result += char
     }); 
  return result;
}
Ответ написан
function encode (text, openAlph, secureAlph) {
	let result = '', len1 = openAlph.length, len2 = secureAlph.length, alph = {}, textLen = text.length;
  
  if (len1 != len2) throw new Error('Invalid input data');
  
  for (let i=0; i < len1; i++) {
  	alph[openAlph[i]] = secureAlph[i];
  }
  
  for (let i=0; i < textLen; i++) {
  	if (!alph[text[i]]) throw new Error(`Symbol "${text[i]}" not found in openAlph.`);
  	result += alph[text[i]];
  }
  
  return result;
}

console.log(encode(
	"message",
	"abcdefghijklmnopqrstuvwxyz",
	"rsyxuqldnmzvpofceiwktjgabh"
));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы