Великий дешифровщик

Всем привет. Подскажите, пожалуйста, что не так в решении, почему один пример не проходит проверку?

// Алфавит
var symbols = [‘А’, ‘Б’, ‘В’, ‘Г’, ‘Д’, ‘Е’, ‘Ё’, ‘Ж’, ‘З’, ‘И’, ‘Й’, ‘К’, ‘Л’, ‘М’, ‘Н’, ‘О’, ‘П’, ‘Р’, ‘С’, ‘Т’, ‘У’, ‘Ф’, ‘Х’, ‘Ц’, ‘Ч’, ‘Ш’, ‘Щ’, ‘Ъ’, ‘Ы’, ‘Ь’, ‘Э’, ‘Ю’, ‘Я’, ‘а’, ‘б’, ‘в’, ‘г’, ‘д’, ‘е’, ‘ё’, ‘ж’, ‘з’, ‘и’, ‘й’, ‘к’, ‘л’, ‘м’, ‘н’, ‘о’, ‘п’, ‘р’, ‘с’, ‘т’, ‘у’, ‘ф’, ‘х’, ‘ц’, ‘ч’, ‘ш’, ‘щ’, ‘ъ’, ‘ы’, ‘ь’, ‘э’, ‘ю’, ‘я’, ’ ', ‘.’, ‘,’, ‘—’, ‘!’];

// Смещение
var shift = 10;

// Закодированное сообщение
var encodedMessage = [8, 28, 36, 52, 56, 40, 23, 31, 56, 39, 38, 28, 48, 52, 58, 56, 38, 27, 32, 37, 56, 40, 23, 31, 56, 39, 38, 41, 39, 32, 57];

// Раскодированное сообщение
var decodedMessage = ‘’;

for (var i = 0; i < encodedMessage.length; i++) {
if (encodedMessage[i] + shift >= symbols.length) {
decodedMessage += (symbols[encodedMessage[i] + shift]) - symbols.length;
} else {
decodedMessage += symbols[encodedMessage[i] + shift];
}
}

В тесте с первой Б получается ситуация, когда в строке
decodedMessage += (symbols[encodedMessage[i] + shift]) - symbols.length;
мы отнимаем от 72-го элемента массива длину массива символов. Но у нас нет 72-го элемента, поэтому проверка не может его найти и выдаёт NaN. Поэтому, вычитание нужно делать прямо в индексе элемента.
decodedMessage += (symbols[encodedMessage[i] + shift - symbols.length]);

1 лайк

Спасибо большое :pray:

1 лайк

for (var i=0; i<=encodedMessage.length; i++){
for(var j=0; j<=symbols.length; j++){

if(encodedMessage[i]===j && encodedMessage[i]+shift<=symbols.length){decodedMessage += symbols[j+shift]}
else if(encodedMessage[i]===j && encodedMessage[i]+shift>symbols.length){decodedMessage += symbols[(j+shift)-symbols.length];}
;}

;}

Нет, ваш код не OK

Не получается , не в какую не хочет -

// Алфавит
let symbols = [‘А’, ‘Б’, ‘В’, ‘Г’, ‘Д’, ‘Е’, ‘Ё’, ‘Ж’, ‘З’, ‘И’, ‘Й’, ‘К’, ‘Л’, ‘М’, ‘Н’, ‘О’, ‘П’, ‘Р’, ‘С’, ‘Т’, ‘У’, ‘Ф’, ‘Х’, ‘Ц’, ‘Ч’, ‘Ш’, ‘Щ’, ‘Ъ’, ‘Ы’, ‘Ь’, ‘Э’, ‘Ю’, ‘Я’, ‘а’, ‘б’, ‘в’, ‘г’, ‘д’, ‘е’, ‘ё’, ‘ж’, ‘з’, ‘и’, ‘й’, ‘к’, ‘л’, ‘м’, ‘н’, ‘о’, ‘п’, ‘р’, ‘с’, ‘т’, ‘у’, ‘ф’, ‘х’, ‘ц’, ‘ч’, ‘ш’, ‘щ’, ‘ъ’, ‘ы’, ‘ь’, ‘э’, ‘ю’, ‘я’, ’ ', ‘.’, ‘,’, ‘—’, ‘!’];

// Смещение
let shift = 10;

// Закодированное сообщение
let encodedMessage = [8, 28, 36, 52, 56, 40, 23, 31, 56, 39, 38, 28, 48, 52, 58, 56, 38, 27, 32, 37, 56, 40, 23, 31, 56, 39, 38, 41, 39, 32, 57];

// Раскодированное сообщение
let decodedMessage = ‘’;

for (let i = 0; i < encodedMessage.length; i++) {
if (encodedMessage[i] + shift >= symbols.length) {
decodedMessage += (symbols[encodedMessage[i] + shift]) - symbols.length;
} else {
decodedMessage += symbols[encodedMessage[i] + shift];
}
}

for (let j = 0; j <= encodedSymbols.length - 1; j++) {
if (encodedSymbols[j] + shift > symbols.length - 1) {
decodedMessage += symbols[encodedSymbols[j] + shift - symbols.length];
} else {
decodedMessage += symbols[encodedSymbols[j] + shift];
}
}

let symbols = [‘А’, ‘Б’, ‘В’, ‘Г’, ‘Д’, ‘Е’, ‘Ё’, ‘Ж’, ‘З’, ‘И’, ‘Й’, ‘К’, ‘Л’, ‘М’, ‘Н’, ‘О’, ‘П’, ‘Р’, ‘С’, ‘Т’, ‘У’, ‘Ф’, ‘Х’, ‘Ц’, ‘Ч’, ‘Ш’, ‘Щ’, ‘Ъ’, ‘Ы’, ‘Ь’, ‘Э’, ‘Ю’, ‘Я’, ‘а’, ‘б’, ‘в’, ‘г’, ‘д’, ‘е’, ‘ё’, ‘ж’, ‘з’, ‘и’, ‘й’, ‘к’, ‘л’, ‘м’, ‘н’, ‘о’, ‘п’, ‘р’, ‘с’, ‘т’, ‘у’, ‘ф’, ‘х’, ‘ц’, ‘ч’, ‘ш’, ‘щ’, ‘ъ’, ‘ы’, ‘ь’, ‘э’, ‘ю’, ‘я’, ’ ', ‘.’, ‘,’, ‘—’, ‘!’];

let encodedSymbols = [18, 38, 46, 62, 66, 50, 33, 41, 66, 49, 48, 38, 58, 62, 68, 66, 48, 37, 42, 47, 66, 50, 33, 41, 66, 49, 48, 51, 49, 42, 67];

let decodedMessage = ’ ';
encodedSymbols.forEach((item) =>{
decodedMessage+=symbols[item];
});

Вот моё решение:

// Алфавит
let symbols = ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', ' ', '.', ',', '—', '!'];

// Смещение
let shift = 10;

// Закодированное сообщение
let encodedSymbols = [62, 28, 31, 56, 42, 40, 43, 27, 23, 56, 37, 28, 56, 25, 51, 39, 40, 38, 41, 32, 48, 52, 56, 40, 51, 24, 34, 43, 56, 43, 56, 45, 38, 31, 55, 32, 37, 23, 57];

// Раскодированное сообщение
let decodedMessage = '';

for (let i = 0; i <= encodedSymbols.length - 1; i++) {
  if (encodedSymbols[i] + shift > symbols.length) {
    decodedMessage = decodedMessage + symbols[(encodedSymbols[i] + shift) - symbols.length];
  } else {
    decodedMessage = decodedMessage + symbols[encodedSymbols[i] + shift];
  } 
}