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

148 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Algoritmo Mensaje Secreto
localeTitle: Алгоритм секретного сообщения
---
![](//discourse-user-assets.s3.amazonaws.com/original/2X/7/70cf3cc5462f69c2f770ad42d0f24f240a8d8f13.jpg)
### объяснение:
Эта проблема очень проста, вы получите строку, которая представляет фразу в двоичном коде, и вам придется перевести ее на слова. Нет прямого способа сделать это, поэтому вам придется переводить дважды.
## Подсказка: 1
Сначала вы должны преобразовать из **двоичного** в **десятичный,** а затем перевести его в символы.
## Подсказка: 2
Все проще, если сосредоточиться на небольших деталях, разделить сообщение, что вы получаете, и сосредоточиться на одной букве за раз.
## Подсказка: 3
Удостоверьтесь, что после перекодирования двоичного кода в десятичный символ можно сбросить любой из вариантов, используемых для выполнения перевода. Кроме того, не забудьте вернуть все на одну цепочку.
## Спойлер!
![предупреждающий знак](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Решение ниже!**
## Решение для кода:
```
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:](//forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=2 ": ракета:") [В REPL!](https://repl.it/CLnm/0)
# Объяснение кода:
* Мы выделяем строку в массиве строк, разделенных пробелами.
* Мы создаем переменную, которая будет необходима на этом пути, имя самоочевидно.
* Мы перебираем новую двоичную матрицу.
* Мы конвертируем в десятичное число с помощью 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:](//forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=2 ": ракета:") [В REPL!](https://repl.it/CLno/0)
# Объяснение кода:
* Для каждой бинарной цепи мы проверяем те и игнорируем нули.
* Для тех, кто является одним или активным, мы преобразуем их в десятичные. Это учитывает положение и соответствующую власть, к которой он должен быть повышен.
* Мы сохраняем мощность в переменной **мощности,** добавляя ее к предыдущим в переменной **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:](//forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=2 ": ракета:") [В REPL!](https://repl.it/CLnp/0)
# Объяснение кода:
* Сначала мы используем `split()` чтобы иметь возможность работать с каждым символом в качестве матричного элемента.
* Затем мы используем `map()` для обработки каждого двоичного элемента до десятичного с помощью `pareseInt()`
* Наконец, мы можем использовать `String.fromCharCode()` для преобразования каждого номера ASCII в соответствующий символ.
* Однако `fromCharCode()` ожидает серию чисел вместо матрицы. Мы можем использовать ES6 Spread Operator для передачи массива чисел в виде отдельных номеров. Дополнительная информация: [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/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:](//forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=2 ": ракета:") [В REPL!](https://repl.it/CLnr/0)
# Объяснение кода:
* В этом решении мы используем `String.replace()` чтобы найти все двоичные числа и преобразовать их в символы.
* Сначала мы используем регулярное выражение для нахождения всех двоичных чисел и необязательных конечных пространств.
* Затем мы определяем функцию, которая преобразует каждое первое подконус к числу с `parseInt()` а затем символ с `String.fromCharCode()` . Не используя второе подкоординатность, мы оставляем в стороне все пространства, которые находятся между каждым двоичным числом.
* Наконец, мы используем наше регулярное выражение и функцию, определенную как параметр `String.replace()` .
> **ПРИМЕЧАНИЕ.** Пожалуйста, добавьте свое имя пользователя, только если вы добавили в статью **соответствующий контент** . (Пожалуйста, не удаляйте существующее имя.)