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


#24
Мой код

for (var i = 0; i < encodedMessage.length; i++) {
var shiftedMessage = encodedMessage[i] + shift;

decodedMessage += shiftedMessage > symbols.length ?
symbols[(shiftedMessage-symbols.length)] :
symbols[shiftedMessage];
}


#25
Мой вариант

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;
}
}
}


#26

Условие не универсально.


#27
Меньше фигурных скобок, если после проверки условия, только одна строка, то скобки использовать не обязательно
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 фигурные скобки обязательны. Вроде) если нет, то думаю меня поправят)


#28

у меня так получилось

Summary

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];
}
}


#29

Мой вариант

Summary

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);


#30
Summary
// Раскодированные символы
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]];
}

#31

Мы не знаем как работает программа шифровальщик, поэтому вариант с проверкой не универсальный. Например encodedMessage[8] должен иметь то же значение, что и элемент encodedMessage[8 + symbols.length]

По этому мой вариант:
for (var i = 0; i < encodedMessage.length; i++) {
decodedMessage += symbols[(encodedMessage[i] + shift) % symbols.length];
}


#32

Я, конечно, вообще тупил с этим заданием полтора часа и только, прочитав чужие коды, понял, что можно было сократить в 2 раза и не забивать лишними переменными((
А собственное решение такое:

Код

44

P.S. правда решил идти через сложный вариант со стиранием запятых из массива :smiley: для этого пришлось изучать более углубленно на learn-js)