9.4 KiB
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");
Объяснение кода:
- Мы выделяем строку в массиве строк, разделенных пробелами.
- Мы создаем переменную, которая будет необходима на этом пути, имя самоочевидно.
- Мы перебираем новую двоичную матрицу.
- Мы конвертируем в десятичное число с помощью 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");
Объяснение кода:
- Для каждой бинарной цепи мы проверяем те и игнорируем нули.
- Для тех, кто является одним или активным, мы преобразуем их в десятичные. Это учитывает положение и соответствующую власть, к которой он должен быть повышен.
- Мы сохраняем мощность в переменной мощности, добавляя ее к предыдущим в переменной 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");
Объяснение кода:
- Сначала мы используем
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");
Объяснение кода:
- В этом решении мы используем
String.replace()
чтобы найти все двоичные числа и преобразовать их в символы. - Сначала мы используем регулярное выражение для нахождения всех двоичных чисел и необязательных конечных пространств.
- Затем мы определяем функцию, которая преобразует каждое первое подконус к числу с
parseInt()
а затем символ сString.fromCharCode()
. Не используя второе подкоординатность, мы оставляем в стороне все пространства, которые находятся между каждым двоичным числом. - Наконец, мы используем наше регулярное выражение и функцию, определенную как параметр
String.replace()
.
ПРИМЕЧАНИЕ. Пожалуйста, добавьте свое имя пользователя, только если вы добавили в статью соответствующий контент . (Пожалуйста, не удаляйте существующее имя.)