Мой код
for (var i = 0; i < encodedMessage.length; i++) {
var shiftedMessage = encodedMessage[i] + shift;
decodedMessage += shiftedMessage > symbols.length ?
symbols[(shiftedMessage-symbols.length)] :
symbols[shiftedMessage];
}
for (var i = 0; i < encodedMessage.length; i++) {
var shiftedMessage = encodedMessage[i] + shift;
decodedMessage += shiftedMessage > symbols.length ?
symbols[(shiftedMessage-symbols.length)] :
symbols[shiftedMessage];
}
var shifted = 0;
for (var i = 0; i <= encodedMessage.length; i++){
shifted = shift + encodedMessage[i];
if (shifted > encodedMessage.length){
shifted -= (symbols.length);
}
for (var k = 0; k <= symbols.length; k++){
if (shifted === k){
shifted = symbols[k];
decodedMessage += shifted;
}
}
}
Условие не универсально.
for (var i = 0; i < encodedMessage.length; i++) {
if (encodedMessage[i]+shift <= symbols.length)
var index = encodedMessage[i]+shift;
else index = encodedMessage[i]+shift- symbols.length;
decodedMessage +=symbols[index];
}
console.log(decodedMessage);
for (var i = 0; i < encodedMessage.length; i++) {
var index = 0;
encodedMessage[i]+shift <= symbols.length ? index = encodedMessage[i]+shift : index = encodedMessage[i]+shift- symbols.length;
decodedMessage +=symbols[index];
}
console.log(decodedMessage);
Ps: При использовании цикла for фигурные скобки обязательны. Вроде) если нет, то думаю меня поправят)
у меня так получилось
var key;
for (i=0; i <= encodedMessage.length - 1; i++) {
key = encodedMessage[i] + shift;
if (key > symbols.length) {
decodedMessage = decodedMessage + symbols[key - symbols.length];
} else {
decodedMessage = decodedMessage + symbols[key];
}
}
Мой вариант
for (var i = 0; i < encodedMessage.length; i++) {
var index = encodedMessage[i] + shift;
if (index > symbols.length) {
index -= symbols.length;
}
decodedMessage += symbols[index];
}
console.log(decodedMessage);
// Раскодированные символы
var decodedSymbols = [];
//Получаю массив с раскодированными символами
for (var i = 0; i < encodedMessage.length; i++ ) {
decodedSymbols[i] = encodedMessage[i] + shift;
if (decodedSymbols[i] > symbols.length) {
decodedSymbols[i] -= symbols.length;
}
}
//Собираю строку
for (var j = 0; j < decodedSymbols.length; j++ ) {
decodedMessage += symbols[decodedSymbols[j]];
}
Мы не знаем как работает программа шифровальщик, поэтому вариант с проверкой не универсальный. Например encodedMessage[8] должен иметь то же значение, что и элемент encodedMessage[8 + symbols.length]
По этому мой вариант:
for (var i = 0; i < encodedMessage.length; i++) {
decodedMessage += symbols[(encodedMessage[i] + shift) % symbols.length];
}
Я, конечно, вообще тупил с этим заданием полтора часа и только, прочитав чужие коды, понял, что можно было сократить в 2 раза и не забивать лишними переменными((
А собственное решение такое:
P.S. правда решил идти через сложный вариант со стиранием запятых из массива для этого пришлось изучать более углубленно на learn-js)
Добрый день.Мой вариант прошу критику.
for (var i=0;i<=encodedMessage.length-1;i++) {
decodedMessage=decodedMessage+symbols[encodedMessage[i]];
}
console.log(decodedMessage);
Вот вроде всё правельно выдаёт но при проверке на 3ем этапе виснет (и проверка фейлит).
В чём беда?
Сравните с решениями выше
я не думаю что у этой задачи только одно верное решение, меня интересует почему мой вариант не принимается хотя он работает и первые две проверки проходит (потом виснит)
Либо предоставьте больше информации, либо все таки сравните решения) все решают через циклы, поэтому решения плюс минус одинаковы
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++){
decodedMessage +=symbols[encodedMessage[i]+shift];
}
А ошибка какая? Как мне кажется, на какой-то итерации у вас идёт обращение к элементу массива, которого не существует
А зачем нужна переменная shift? Просто если её убрать здесь [encodedMessage[i]+shift] , то нормально работает.
Идея же в том сообщение зашифровано, без shift
получим такое же сообщение, как и до задачи
Ага, тогда понятно.
Я перепутала с испытанием «Начинающий дешифровщик».