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

Потому что в конце кода зачем-то пишут console.log - уберите его и все заработает!

Подскажите, почему не работает такое решение? Насколько я понял, к строке можно обращаться по индексу, как к массиву. Проблема в том, что изначально массив получается нулевой? Screenshot_1

дело в том, что у вас и массива то нет. дешифровка это строка.
вы в нее должны записать элементы массива алфавита, в том порядке, в котором они идут в шифровке (encodedMessage). т.е. поставить символ алфавита по порядку, номером выступает каждый член массива шифровки, а порядок - числовая последовательность шифровки.

Как Вы оцениваете сложность этого задания? Если я не могу понять как его решить, это очень плохо?

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

Не понятно все. Что, как, почему… Просто смотрю на задание, и не понимаю с чего начать(

1 лайк

Вопрос вот в чем, после прохождения предыдущих курсов, не пользуясь дополнительными источниками, насколько должно быть легким решение данного задания. Мне просто интересно, это только мне так сложно это дается, или всем новичкам без какого либо бэкграунда.

3 лайка

Походу я гуманитарий…

1 лайк

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

9 лайков

Спасибо за хорошие слова. Попробую посмотреть в других источниках.

1 лайк

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; i++) {
decodedMessage = decodedMessage + symbols[encodedMessage[i]];
}

Может кто то по шагам на словах по объяснить как работает это решение?

значит так:
var decodedMessage = ''; // у нас есть пустая строка, в нее будем записывать расшифровку
for(var i = 0; i < encodedMessage.length; i++) { // цикл, который пробегается по всем элементам шифровки
следующий шаг подробнее:
– в расшифровку decodedMessage мы добавляем букву из алфавита symbols, порядковым номером буквы в алфавите является элемент шифровки
– можно было бы расписать как g = encodedMessage[i]
decodedMessage = decodedMessage + symbols[g]
– decodedMessage в себя же дописывает новые символы

цикл позволяет пробежаться по всей шифровке. т.е. длина расшифровки равна длине шифровки. каждому элементу шифровки соответствует буква из алфавита.

3 лайка

Мне не понятен один момент, в encodedMessage[i]. Насколько я понял, цикл повторяется пока не будет выполнено условие i < encodedMessage.length и увеличиватся от 0 до 31 на 1, так как encodedMessage.length ровно 31. Правильно? Только в моем понимании [i] это 0,1,2,3,4,5…31. То есть порядок массивы а не сами элементы 18,38,46,62…67.

Короче я думал что цикл перебирает индексы элементов, а не сами элементы.

цикл повторяется длина_массива раз (в нашем случае 31)
цикл перебирает индексы, если в теле цикла есть операции непосредственно с индексом, т.е. i + a - c / d и т.д.
если же речь о something[i], то цикл перебирает элементы массива на позициях счетчика
то что написано в условии цикла, задает только правила для счетчика (коим является индекс)

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

Доброго времени суток)
Мб кому понадобится.

  1. Создаем цикл
  2. Создаем переменную внутри цикла.
  3. Внутри цикла в переменную записываем encodedMessage[i]
  4. В переменную decodedMessage добавляем symbols[имя вашей переменной]

for (i = 0; i <= encodedMessage.length - 1; i++){
var Ваша переменная;
Ваша переменная = encodedMessage[i];
decodedMessage += symbols[Ваша переменная];
}

и у меня, не пойму что не так

Попробуй “i<=encodedMessage.length-1”.
У меня сразу же сработало.

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

}
console.log (decodedMessage)