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

164 lines
12 KiB
Markdown
Raw Normal View History

2018-10-12 20:00:59 +00:00
---
title: Binary Agents
localeTitle: Двоичные агенты
---
![](//discourse-user-assets.s3.amazonaws.com/original/2X/7/70cf3cc5462f69c2f770ad42d0f24f240a8d8f13.jpg)
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 ": Triangular_flag_on_post:") Не забудьте использовать **`Read-Search-Ask`** если вы застряли. Попробуйте подключить программу ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": Busts_in_silhouette:") и напишите свой собственный код ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":карандаш:")
## Проблема Объяснение:
Эта проблема очень проста, вы получите строку, которая будет представлять предложение в двоичном коде, и вам нужно перевести это на слова. Нет прямого способа сделать это, поэтому вам придется переводить дважды.
### Связанные ссылки
* [String.prototype.charCodeAt](http://forum.freecodecamp.com/t/javascript-string-prototype-charcodeat/15933)
* String.fromCharCode
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": Speech_balloon:") Подсказка: 1
Прежде чем преобразовать эти значения в символы, вы должны сначала преобразовать их из **двоичного** в **десятичный** .
> _попытаться решить проблему сейчас_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": Speech_balloon:") Подсказка: 2
Все проще, если сосредоточиться на небольших частях, разделить вход для фокусировки на одну букву в то время.
> _попытаться решить проблему сейчас_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": Speech_balloon:") Подсказка: 3
Убедитесь, что каждый раз, когда вы перекодируете символ из двоичного в десятичный, вы возвращаете любую переменную, которую вы использовали для отслеживания. Также не забудьте вернуть все обратно в одну строку.
> _попытаться решить проблему сейчас_
## Осторожно, спойлеры!
![предупреждающий знак](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Решение впереди!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ": Начинающий:") Решение базового кода:
```javascript
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:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ": Ракета:") [Код запуска](https://repl.it/CLnm/0)
# Код Объяснение:
* Разделите строку на массив строк, разделенных пробелами.
* Создайте некоторые переменные, которые понадобятся на этом пути, имена по большей части поясняются сами по себе.
* Итерации через каждую двоичную строку в новом массиве.
* Преобразуйте в десятичное число с помощью parseInt ( _двоичный_ , 2) (со вторым параметром, который мы укажем, в какой базе находятся наши номера)
* В конце мы возвращаем преобразованное сообщение.
## Связанные ссылки
* [String.prototype.split](http://forum.freecodecamp.com/t/javascript-string-prototype-split/15944)
* [ParseInt](http://forum.freecodecamp.com/t/javascript-parseint/14686)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ": Подсолнечное:") Решение промежуточного кода:
```javascript
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:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ": Ракета:") [Код запуска](https://repl.it/CLno/0)
# Обозначение кода
* Для каждой из этих двоичных строк проверьте их и игнорируйте нули.
* Для тех, кто является одним или активным, затем преобразуйте их в десятичные числа, это учитывает положение и правильную силу, к которой он должен быть поднят.
* Храните энергию в переменной **мощности** , добавляя ее к любым предыдущим в переменной **decValue** . Эта переменная добавит и добавит мощности активных до конца цикла, а затем вернет десятичное число.
* Преобразуйте окончательное десятичное значение вне внутреннего цикла, а затем преобразуйте его в ASCII и сохраните в **предложении** вместе с любой другой текстовой строкой, уже преобразованной и сохраненной.
* Сбросьте переменную **decValue,** чтобы избежать **появления** неправильных десятичных знаков, прежде чем продолжить внешний цикл.
## Связанные ссылки
* [Math.pow](http://forum.freecodecamp.com/t/javascript-math-pow/14685)
* String.length
* [Название ссылки 3](http://example.com)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": Rotating_light:") Расширенное решение для кода:
```javascript
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:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ": Ракета:") [Код запуска](https://repl.it/CLnp/0)
# Обозначение кода
* Сначала мы используем `split()` чтобы иметь возможность работать с каждым символом в качестве элемента Array
* Затем используйте `map()` для обработки каждого элемента из двоичного в десятичное с помощью `pareseInt()`
* Наконец, мы можем использовать `String.fromCharCode()` для преобразования каждого номера ASCII в соответствующий символ
* Однако `fromCharCode()` ожидает серию чисел, а не массив! Мы можем использовать ES6 Spread Operator для передачи в массив чисел в виде отдельных чисел. См. Здесь для получения дополнительной информации; [Оператор распространения](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)
## Связанные ссылки
* [Array.prototype.map](http://forum.freecodecamp.com/t/javascript-array-prototype-map/14294)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ": Буфер обмена:") ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":предупреждение:") **НЕ** добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это **_похоже, но лучше_** , попробуйте объединить (или заменить) существующее подобное решение.
* Добавьте объяснение своего решения.
* Классифицируйте решение в одной из следующих категорий - **Basic** , **Intermediate** и **Advanced** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":светофор:")
* Пожалуйста, добавьте свое имя пользователя, только если вы добавили **соответствующее основное содержимое** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":предупреждение:") **_НЕ_** _удаляйте существующие имена пользователей_ )
> Увидеть ![:point_right:](https://forum.freecodecamp.com/images/emoji/emoji_one/point_right.png?v=3 ": Point_right:") [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) для [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) для справки.