@kenthex

Как обработать массивы?

Дана задача многопетлевой полиалфавитной подстановки. Дан открытый текст и 2 ключа, не могу сообразить как обработать массивы с этим текстом и ключами, чтобы получить индекс нового символа. Скриншот примера ниже.

5de1435b63f73613046020.png

Алфавит:
5de14436f1776531502107.png
  • Вопрос задан
  • 287 просмотров
Решения вопроса 1
erge
@erge
Примус починяю
const al   = "АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯ "; // Алфавит
let key1 = "ПЕРВЫЙ"; // первый ключ
let key2 = "БУКВА"; // второй ключ
let open_str = "ЭТО СТРОКА ОТКРЫТОГО ИСХОДНОГО ТЕКСТА"; // кодируемый текст

// т.к. в алфавите нет букв Й и Ъ, то производим соответствующую замену:
key1 = key1.replace("Й","И").replace("Ъ","Ь");
key2 = key2.replace("Й","И").replace("Ъ","Ь");
open_str = open_str.replace("Й","И").replace("Ъ","Ь");

// кодируем текст
let encoded_str = ([...open_str]).map( (e,i) => al[(al.indexOf(e) + al.indexOf(key1[i%key1.length]) + al.indexOf(key2[i%key2.length])) % 32] ).join("");

console.log(encoded_str);


PS:
к строке по сути можно обращаться как к массиву - str[index]
про .map смотрим здесь - https://developer.mozilla.org/en-US/docs/Web/JavaS...
если вам надо прям вот на МАССИВАХ, то просто сделайте соответствующие переменные "массивами"
строку в массив можно разбить так str.split("") или [...str]

по скрипту
al - строка / массив букв алфавита
al.indexOf(char) - получаем индекс буквы в алфавите
по выбору символа из ключа - т.к. ключ у нас заитерирован, то берем остаток от деления индекса кодируемого символа на длину ключа , это и будет символ из ключа - key1[i%key1.length], далее получаем его код по алфавиту - al.indexOf(key1[i%key1.length])

и у вас много ошибок в таблице, например в третьей строке - конечный символ не И, а З
и т.д.

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Как я понял:
Есть алфавит с соответствиями кодов: 0 - А, 1- Б, 2 - В, 3 - Г, и т.д.

[Код символа из алфавита] = ([код буквы сообщения] + [код буквы ключа1] + [код буквы ключа2]) mod 32

mod - это остаток от деления суммы на 32 (также "mod", иногда обозначают знаком процента: "%" ).
Складываем числа, делим, получаем остаток, смотрим букву на основании алфавита.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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