freeCodeCamp/guide/russian/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../binary-agents/index.md

12 KiB
Raw Blame History

title localeTitle
Binary Agents Двоичные агенты

:triangular_flag_on_post: Не забудьте использовать Read-Search-Ask если вы застряли. Попробуйте подключить программу :busts_in_silhouette: и напишите свой собственный код :pencil:

Проблема Объяснение:

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

Связанные ссылки

:speech_balloon: Подсказка: 1

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

попытаться решить проблему сейчас

:speech_balloon: Подсказка: 2

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

попытаться решить проблему сейчас

:speech_balloon: Подсказка: 3

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

попытаться решить проблему сейчас

Осторожно, спойлеры!

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

Решение впереди!

:beginner: Решение базового кода:

    function binaryAgent(str) { 
      biString = str.split(' '); 
      uniString = []; 
 
    /*using the radix (or base) parameter in parseInt, we can convert the binary 
      number to a decimal number while simultaneously converting to a char*/ 
 
      for(i=0;i < biString.length;i++){ 
        uniString.push(String.fromCharCode(parseInt(biString[i], 2))); 
      } 
 
      // we then simply join the string 
      return uniString.join(''); 
    } 
 
    // test here 
    binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); 

:rocket: Код запуска

Код Объяснение:

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

Связанные ссылки

:sunflower: Решение промежуточного кода:

    function binaryAgent(str) { 
      // Separate the binary code by space. 
      str = str.split(' '); 
      var power; 
      var decValue = 0; 
      var sentence = ''; 
 
      // Check each binary number from the array. 
      for (var s = 0; s < str.length; s++) { 
        // Check each bit from binary number 
        for (var t = 0; t < str[s].length; t++) { 
          // This only takes into consideration the active ones. 
          if (str[s][t] == 1) { 
            // This is quivalent to 2 ** position 
            power = Math.pow(2, +str[s].length - t - 1); 
            decValue += power; 
 
            // Record the decimal value by adding the number to the previous one. 
          } 
        } 
 
        // After the binary number is converted to decimal, convert it to string and store 
        sentence += (String.fromCharCode(decValue)); 
 
        // Reset decimal value for next binary number. 
        decValue = 0; 
      } 
 
      return sentence; 
    } 
 
    // test here 
    binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); 

:rocket: Код запуска

Обозначение кода

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

Связанные ссылки

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

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

:rocket: Код запуска

Обозначение кода

  • Сначала мы используем split() чтобы иметь возможность работать с каждым символом в качестве элемента Array
  • Затем используйте map() для обработки каждого элемента из двоичного в десятичное с помощью pareseInt()
  • Наконец, мы можем использовать String.fromCharCode() для преобразования каждого номера ASCII в соответствующий символ
  • Однако fromCharCode() ожидает серию чисел, а не массив! Мы можем использовать ES6 Spread Operator для передачи в массив чисел в виде отдельных чисел. См. Здесь для получения дополнительной информации; Оператор распространения

Связанные ссылки

:clipboard: ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:

  • :warning: НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
  • Добавьте объяснение своего решения.
  • Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced . :traffic_light:
  • Пожалуйста, добавьте свое имя пользователя, только если вы добавили соответствующее основное содержимое . ( :warning: НЕ удаляйте существующие имена пользователей )

Увидеть :point_right: Wiki Challenge Solution Template для Wiki Challenge Solution Template для справки.