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

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

// Алфавит
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