freeCodeCamp/guide/russian/miscellaneous/algoritmo-mensaje-secreto/index.md

9.4 KiB
Raw Blame History

title localeTitle
Algoritmo Mensaje Secreto Алгоритм секретного сообщения

объяснение:

Эта проблема очень проста, вы получите строку, которая представляет фразу в двоичном коде, и вам придется перевести ее на слова. Нет прямого способа сделать это, поэтому вам придется переводить дважды.

Подсказка: 1

Сначала вы должны преобразовать из двоичного в десятичный, а затем перевести его в символы.

Подсказка: 2

Все проще, если сосредоточиться на небольших деталях, разделить сообщение, что вы получаете, и сосредоточиться на одной букве за раз.

Подсказка: 3

Удостоверьтесь, что после перекодирования двоичного кода в десятичный символ можно сбросить любой из вариантов, используемых для выполнения перевода. Кроме того, не забудьте вернуть все на одну цепочку.

Спойлер!

предупреждающий знак

Решение ниже!

Решение для кода:

function binaryAgent(str) { 
  biString = str.split(' '); 
  uniString = []; 
 
  // Utilizando el parámetro base en parseInt podemos convertir el número 
  // binario a número decimal mientras simultáneamente lo convertimos a carácter. 
 
  for(i=0;i < biString.length;i++){ 
    uniString.push(String.fromCharCode(parseInt(biString[i], 2))); 
  } 
  // Simplemente unimos la cadena. 
  return uniString.join(''); 
 } 
 
 // realizamos el test 
 binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); 

:rocket: В REPL!

Объяснение кода:

  • Мы выделяем строку в массиве строк, разделенных пробелами.
  • Мы создаем переменную, которая будет необходима на этом пути, имя самоочевидно.
  • Мы перебираем новую двоичную матрицу.
  • Мы конвертируем в десятичное число с помощью parseInt ( двоичный , 2) (со вторым параметром мы расскажем вам, на какой основе наши числа в настоящее время)
  • В итоге мы возвращаем наше преобразованное сообщение.

Второе решение:

function binaryAgent(str) { 
  // Separamos el código binario por sus espacios. 
  str = str.split(' '); 
  var power; 
  var decValue = 0; 
  var sentence = ''; 
 
  // Comprobamos cada número binario de la matriz. 
  for (var s = 0; s < str.length; s++) { 
    // Comprobamos cada bit del número binario. 
    for (var t = 0; t < str[s].length; t++) { 
      // Esto solo toma en consideración los activos. 
      if (str[s][t] == 1) { 
        // Esto es equivalente a 2 ** posición. 
        power = Math.pow(2, +str[s].length - t - 1); 
        decValue += power; 
 
        // Guardamos el valor decimal sumándolo al anterior. 
      } 
    } 
 
    // Luego de que el número binario es convertido a decimal, lo convertimos en una cadena y lo guardamos. 
    sentence += (String.fromCharCode(decValue)); 
 
    // Reseteamos el valor decimal para el próximo número binario. 
    decValue = 0; 
  } 
 
  return sentence; 
 } 
 
 // realizamos el test 
 binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); 

:rocket: В REPL!

Объяснение кода:

  • Для каждой бинарной цепи мы проверяем те и игнорируем нули.
  • Для тех, кто является одним или активным, мы преобразуем их в десятичные. Это учитывает положение и соответствующую власть, к которой он должен быть повышен.
  • Мы сохраняем мощность в переменной мощности, добавляя ее к предыдущим в переменной decValue . Эта переменная будет продолжать добавлять полномочия к концу цикла и затем возвращать десятичное число.
  • Мы преобразуем окончательное десятичное число в ASCII и добавим его к переменной предложения вместе с любой другой текстовой строкой, уже преобразованной и сохраненной.
  • Мы возвращаем значение переменной decValue, чтобы избежать неправильных десятичных знаков, прежде чем продолжить внешний цикл.

Третье решение:

function binaryAgent(str) { 
  return String.fromCharCode(...str.split(" ").map(function(char){ return parseInt(char, 2); })); 
 } 
 
 // realizamos el test 
 binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); 

:rocket: В REPL!

Объяснение кода:

  • Сначала мы используем split() чтобы иметь возможность работать с каждым символом в качестве матричного элемента.
  • Затем мы используем map() для обработки каждого двоичного элемента до десятичного с помощью pareseInt()
  • Наконец, мы можем использовать String.fromCharCode() для преобразования каждого номера ASCII в соответствующий символ.
  • Однако fromCharCode() ожидает серию чисел вместо матрицы. Мы можем использовать ES6 Spread Operator для передачи массива чисел в виде отдельных номеров. Дополнительная информация: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

Четвертое решение:

function binaryAgent(str) { 
  var re = /(\d+)(\s?)/g; 
  function convertToChar(match,p1,p2){ 
    return String.fromCharCode(parseInt(p1, 2)); 
  } 
  return str.replace(re, convertToChar); 
 } 
 
 // realizamos el test 
 binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); 

:rocket: В REPL!

Объяснение кода:

  • В этом решении мы используем String.replace() чтобы найти все двоичные числа и преобразовать их в символы.
  • Сначала мы используем регулярное выражение для нахождения всех двоичных чисел и необязательных конечных пространств.
  • Затем мы определяем функцию, которая преобразует каждое первое подконус к числу с parseInt() а затем символ с String.fromCharCode() . Не используя второе подкоординатность, мы оставляем в стороне все пространства, которые находятся между каждым двоичным числом.
  • Наконец, мы используем наше регулярное выражение и функцию, определенную как параметр String.replace() .

ПРИМЕЧАНИЕ. Пожалуйста, добавьте свое имя пользователя, только если вы добавили в статью соответствующий контент . (Пожалуйста, не удаляйте существующее имя.)