Пятая программа: «Начинающий дешифровщик», не работает проверка

while (i < encodedMessage.length) {
decodedMessage += symbols[encodedMessage[i]];
i++;
}
console.log(decodedMessage);

Боже ж мой. Это цикл в цикле. А я-то думаю что у меня не срастается после decodedMessage += symbols[ Честно говоря, глава после length как в тумане :slight_smile:

Все отлично, только так наглядней!

// Алфавит

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

// Закодированное сообщение

var encodedMessage = [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];

// Раскодированное сообщение

var decodedMessage = '';

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

console.log(decodedMessage);

Добрый день. Нужна помощь в разборе кода. Не получается разобраться почему выдает ошибки на всех этапах проверки.

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

// Закодированное сообщение
let encodedMessage = [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 = ‘’;

for (let i = 0; i <= encodedMessage.length - 1; i++) {
decodedMessage += symbols[encodedMessage[i]];
}
console.log(decodedMessage);

Привет. Во-первых тебе лучше заменить
i <= encodedMessage.length - 1 на i < encodedMessage.length , так удобнее читать, ну и тебе нужно убрать console.log(decodedMessage)

1 лайк

всё равно не работает :frowning:

кажется они исправили ошибку, теперь всё работает без ошибок с точно таким же кодом

Не черта не понял чего хотят в этом задании, что кого дешифровывать должно. есть набор символов в массиве, в другом набор цифр, типа это индексы, только если это порядковые номера почему они в беспорядке находятся, почему есть повторяющиеся значения, почему их меньше чем символов в массиве? Что должно быть склеено? Помогите пожалуйста понять смысл задания, без него я не могу понять решения

У тебя в первом массиве алфавит со знаками препинания, во втором индексы для первого массива, чтобы из них собрать фразу. Берем по порядку 4 значения из второго массива “18, 38, 46, 62”, сопоставляем с первым: 18 - С, 38 - е, 46 - м, 62 - ь. Получилось “Семь”. Таким образом тебе надо расшифровать всю фразу используя индексы из второго массива, подставляя их в первый.
В проверке будут подставляться другие значения во второй массив, чтобы получались другие фразы, которые по букве собираются из первого массива.

почему он не работает кто объяснит?

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

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

// Закодированное сообщение
let encodedMessage = [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 = ‘’;

for (let i = 0; i <= encodedMessage.length - 1; i++) {
decodedMessage += symbols[encodedMessage[i]];
}
console.log(decodedMessage);

ты уже выполнял на 100%?

в let decodedMessage = ‘’; поправь ковычки

поправил не работает

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

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

};

Вот такая реализация у меня
let decodedMessage = ‘’;
for (let i = 0; i < encodedSymbols.length; i++) {
decodedMessage += symbols[encodedSymbols[i]];
}

сделал методом - forEach()

let decodedMessage = ‘’;

encodedSymbols.forEach((item, index) => {
decodedMessage += symbols[item]
})

let info = '';

for (let i = 0; i <= encodedSymbols.length - 1; i++) {
 info += symbols[encodedSymbols[i]];
  }

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

Из пройденного материала не понял как срабатывает эта строка кода:

     symbols[encodedSymbols[i]]  

Смысл понятен, но не понимаю механизм. В пройденных темах не помню где про такую вложенность массивов рассказывалось. И как точно, они в таком случае срабатывают.

Сам решить не смог, подглядывание решения показывает, что и не решил бы. Просто в голове нет ничего по данной теме, может я зазевался?

Если не сложно, разъясните конкретно про эту строчку кода!!!
Логика того что нужно делать в задании была полностью понятна, но вот с реализацией того как занести symbols, с помощью encodedSymbols, в decodedMessage я не справился.

1 лайк

Если всё ещё нужен ответ, то конструкция работает примерно так:
Читать справа налево:

  1. Программа смотрит в i, и там итерация 0
  2. Потом она смотрит в encodedSymbols и передаёт этот ноль туда
  3. encodedSymbols смотрит что у него под индексом 0 в массиве, и это число 18
  4. Потом программа смотрит в symbols и передаёт число 18 туда
  5. symbols смотрит что у него по индексом 18, и это буква “С”
  6. symbols складывает букву “С” с пустой строкой из decodedMessage
  7. Програма ложит “С” в decodedMessage
  8. Начинается след итерация. Программа смотрит в i, и там итерация 1
  9. И тд, и тп.

decodedMessage = decodedMessage + symbols[encodedSymbols[i]]

5 лайков

Спасибо, за столь подробное разъяснение! Понимание есть, а вот прям посимвольный разбор очень плотно информацию укладывает.