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


#46

Сколько в symbols элементов?


#47

Так и есть. В последней фразе “Б” не выбирается.

"undefinedез труда не выпросишь рыбку у хозяина."


#48

Спасибо ребят! теперь я всё осознал )):mortar_board:


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

Такой вариантик…


#50

Посмотрел все варианты и нигде не нашел выполнения условия с 71 знаком (если 62, то это 62+10-71), в моем варианте оно учитывается

Мой вариант
for (var i = 0; i < encodedMessage.length; i++) {

if (encodedMessage[i] <= 61) {
decodedMessage += symbols[encodedMessage[i] + shift];
} else {
decodedMessage += symbols[encodedMessage[i] + shift - 71];
}
}


#51

такой вариант .

код

var decodedMessage = [’’];
var index = 0 ;

for (var i = 0 ; i <= encodedMessage.length ; i++ ) {
decodedMessage[index++]=symbols.join(’’)[encodedMessage[0+i]]
}


#52

Друзья, я вот вообще не понял этого задания. Может кто то прям разжевать по каждой строке, вот хоть убейте не могу разобраться.
UPD. Немного разобрался, теперь не могу понять зачем вы сочиняете такие сложные коды, если все работает на:
for (var i = 0; i <= encodedMessage.length - 1; i++)
{
decodedMessage += symbols[encodedMessage[i]];
}


#53

Это работает на предыдущем задании по дешифровке, без смещения…

Мой вариант, по-моему намудрил, что скажете :slight_smile:

Великий дешифровщик
console.log('Программа "Великий дешифровщик" by Nerealist');

// Алфавит
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];
console.log('Шифр ...... : ' + encodedMessage);

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

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

console.log('..... Расшифровка ..... готово : ' + decodedMessage);

#55
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 - 1; i++) {
   if (encodedMessage[i] + shift > symbols.length) {
   decodedMessage += symbols[encodedMessage[i] + shift - symbols.length];
  } else {
    decodedMessage += symbols[encodedMessage[i] + shift];
  }
}

#56

Почему не работает сей цикл?

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

Если элемент encodedMessage со смещением превышает длину массива символов
if((encodedMessage[i] + shift) > symbols.length) {

То symbolIndex будет равен разности encodedMessage и symbols.length
var symbolIndex = encodedMessage[(i + shift) - symbols.length];

} else {

Либо же элементу encodedMessage со смещением на shift
symbolIndex = encodedMessage[i + shift];
}

Далее склеивается сообщение из символов.
var symbol = symbols[symbolIndex];
decodedMessage += symbol;
}

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

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

decodedMessage += symbol;
}