Испытание: Великий дешифровщик


#1
Мое решение
var key;
var symbolsLength = symbols.length;

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

#2

Пожалуйста, прячьте свой код таким образом:

Мой вариант
var decodedMessage = '';
for (var j = 0; j < encodedMessage.length; j++) {
    var index = encodedMessage[j] + shift;
    decodedMessage += symbols[index > symbols.length ? index - symbols.length : index]; 
}

#3

Ок. Спасибо.


#4

var decodedMessage = ‘’;
var d =0;

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

}
не проходит проверку. Подскажите, что не так?


#5

i < encodedMessage.length; или i <= encodedMessage.length - 1;

Расскажите об этом фрагменте, я не могу понять, в чем его суть:


#6

Спасибо! Нашел ошибку!


#7
Моё решение:
for (var i = 0; i <= encodedMessage.length - 1; i++) {  
  if (encodedMessage[i] + shift <= symbols.length) {
    var j = encodedMessage[i] + shift;    
  } else {
    j = encodedMessage[i] + shift - symbols.length;    
  }
  decodedMessage += symbols[j];   
}

#8

Инесс, если вопрос уже не актуален для Вас, все равно оставлю здесь.

В уроке 9 “Ударим циклами по массивам!” описывается почему используется i < encodedMessage.length; или i <= encodedMessage.length - 1;

На пример результатом encodedMessage.length будет 10, так как нумерация идет от нуля при значении индекса равном десяти:
В первом случае будет обращение к несуществующему элементу массива, так как десятого элемента нет, а максимальный девятый.И чтобы не получить ошибочных данных ставим знак меньше;
Во втором случае мы и пишем что индекс будет меньше или равен 10-1. Ведь индекс девять есть!


#9

Спасибо) Ваше объяснение наверняка будет полезно многим.
Мой же вопрос касался нижнего фрагмента с циклом)


#10

Упс:):):slight_smile: Простите, не туда посмотрел! Сказывается некоторая усталость.
Спасибо, что ответили:) Просто я не делал лишних переменных и массивов, как-бы смысла не было:)

Мое решение

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


#12

вот так прошло

Summary

var decodedMessage = ‘’;

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


#13

Цитата
[index > symbols.length ? index - symbols.length : index]; - скажите, пожалуйста,что это значит ? что за правило написания?


#14

Это сокращенная запись блока с условием if...else.
Подробнее тут.


#15
// Алфавит
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 (i=0; i<=encodedMessage.length-1; i++){
  
  decodedMessage+=symbols[encodedMessage[i]+shift];
 
}

Что не так? проходит 5 проверок из 6

UPD: Ответ прост - невнимательность при чтении задания :wink:

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

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

#16
Мой вариант.
var decodedMessage = ‘’;
var Message;
for(var i=0; i <= encodedMessage.length-1; i++) {
Message=encodedMessage[i]+shift;
if(Message<=symbols.length) {
decodedMessage+=symbols[0+Message];
}
else {
decodedMessage+=symbols[0+Message-symbols.length];
}
}
console.log(decodedMessage);

#17

Не без помощи чёрной магии получилось решить:triumph:

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

decodedMessage += symbols[encodedMessage[i] + shift];
}


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

#19

А у меня так вышло:

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

#20

Доброго времени суток! Мой вариант:

Решение

// Алфавит

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 = ‘’;

var letter = 0;

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

if (encodedMessage[i] + shift > symbols.length) {

letter = symbols[(encodedMessage[i] + shift) - symbols.length];

} else {

letter = symbols[encodedMessage[i] + shift];

}

decodedMessage += letter;

}

console.log(decodedMessage);


#22

Привет! Tтобы узнать, что я могу сделать, наберите: @discobot отображение справки.