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

объясните пожалуйста, почему таким образом работает, а если вместо второй ветки раскоментировать ветку елсе, то не работает?

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

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

// Смещение
var shift = 10;
console.log(symbols.length)
// Закодированное сообщение
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 decod = [];

for(i = 0; i < encodedMessage.length; i++){
var indexMessange = encodedMessage[i] + shift;
if(indexMessange <= symbols.length){
decod.push(symbols[indexMessange])
decodedMessage = decod.join(’’);
} else {
decod.push(symbols[indexMessange - symbols.length])
decodedMessage = decod.join(’’);
}
}
console.log(decodedMessage);

я сделал так
for(var i = 0; i <= encodedMessage.length - 1; i++){
var index = encodedMessage[i] + shift;
if(index > symbols.length){
var Index = index - symbols.length
index = Index
}
console.log(index)
var symbol = symbols[i]
decodedMessage+=symbols[index]
}

Моя реализация)

// Алфавит

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 lengthSymbos = symbols.length;

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

console.log(decodedMessage);

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

Добрый день!
Откуда в решении задачи оказалась переменная shift? Что это?
Подскажите, пожалуйста.

shift = 10; указано смещние по алфавиту. Ключ спощу которого можно расшифровать данные.

Извиняюсь, перепутал задание, только до него дошел. Не мог понять, откуда у всех есть значение shift.

Мое решение, для активности форума ;)
// Раскодированное сообщение
var decodedMessage = '';

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

Сделал так. Немного сначала запнулся на превышении длинны алфавита, но добавил проверку и все заработало. Да, было бы намного интереснее, если бы сдвиг в разы превышал длинну алфавита. Тут реально было бы интереснее.
`for (let i=0; i <= encodedMessage.length-1; i++) {

if (encodedMessage[i]+shift <= symbols.length-1) {

decodedMessage += symbols[encodedMessage[i]+shift]
} else {
decodedMessage += symbols[(encodedMessage[i]+shift)-(symbols.length-1)-1]
};
};`

Почему многие не могут выкладывать код через </> , неудобно же читать, особенно если код длинный.

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

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

зато они на погромистов учатся. “сложна, сложна, нипанятна”

2 лайка

Подскажите почему не работает код

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

}

decodedMessage = encodedMessage.map((elem,index)=>elem+shift >symbols.length? symbols[elem+shift-symbols.length]: symbols[elem+shift]).join('');

По-моему тут все максимально просто…

let decodedMessage = '';
for (i = 0; i < encodedSymbols.length; i++) {
decodedMessage = decodedMessage + symbols[encodedSymbols[i]];
}
1 лайк

Мой код.
let someNum = ‘’
let decodedMessage = ‘’;

const getArray = function (array1, array2) {

for (i=0; i<array1.length; i++) {
someNum += array1[i]
}

for (i=0; i<array2.length; i++) {
  let test = array2[i]

   decodedMessage +=  someNum[test]
  }

return decodedMessage

}

getArray(symbols, encodedMessage)

Мой вариант:

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

Необходима модификация, чтобы весь текст записывался в одну строку. Пока вывод в консоль внутри обработчика - символы выводятся по одному. У кого есть варианты?

Спасибо, твой ответ помог найти ошибку!

Не удалось проинициализировать исходные переменные (String) , вот такая фигня . Дальше ничего делать не могу . ПАМАГИТЕ КАК УБРАТЬ ЭТУ ХРЕНЬ
P.S пытался .

Все , я понял (я оказался очень тупым идиотом)