12 KiB
title | localeTitle |
---|---|
Binary Agents | Двоичные агенты |
Не забудьте использовать Read-Search-Ask
если вы застряли. Попробуйте подключить программу и напишите свой собственный код
Проблема Объяснение:
Эта проблема очень проста, вы получите строку, которая будет представлять предложение в двоичном коде, и вам нужно перевести это на слова. Нет прямого способа сделать это, поэтому вам придется переводить дважды.
Связанные ссылки
- String.prototype.charCodeAt
- String.fromCharCode
Подсказка: 1
Прежде чем преобразовать эти значения в символы, вы должны сначала преобразовать их из двоичного в десятичный .
попытаться решить проблему сейчас
Подсказка: 2
Все проще, если сосредоточиться на небольших частях, разделить вход для фокусировки на одну букву в то время.
попытаться решить проблему сейчас
Подсказка: 3
Убедитесь, что каждый раз, когда вы перекодируете символ из двоичного в десятичный, вы возвращаете любую переменную, которую вы использовали для отслеживания. Также не забудьте вернуть все обратно в одну строку.
попытаться решить проблему сейчас
Осторожно, спойлеры!
Решение впереди!
Решение базового кода:
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");
Код Объяснение:
- Разделите строку на массив строк, разделенных пробелами.
- Создайте некоторые переменные, которые понадобятся на этом пути, имена по большей части поясняются сами по себе.
- Итерации через каждую двоичную строку в новом массиве.
- Преобразуйте в десятичное число с помощью parseInt ( двоичный , 2) (со вторым параметром, который мы укажем, в какой базе находятся наши номера)
- В конце мы возвращаем преобразованное сообщение.
Связанные ссылки
Решение промежуточного кода:
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");
Обозначение кода
- Для каждой из этих двоичных строк проверьте их и игнорируйте нули.
- Для тех, кто является одним или активным, затем преобразуйте их в десятичные числа, это учитывает положение и правильную силу, к которой он должен быть поднят.
- Храните энергию в переменной мощности , добавляя ее к любым предыдущим в переменной decValue . Эта переменная добавит и добавит мощности активных до конца цикла, а затем вернет десятичное число.
- Преобразуйте окончательное десятичное значение вне внутреннего цикла, а затем преобразуйте его в ASCII и сохраните в предложении вместе с любой другой текстовой строкой, уже преобразованной и сохраненной.
- Сбросьте переменную decValue, чтобы избежать появления неправильных десятичных знаков, прежде чем продолжить внешний цикл.
Связанные ссылки
- Math.pow
- String.length
- Название ссылки 3
Расширенное решение для кода:
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");
Обозначение кода
- Сначала мы используем
split()
чтобы иметь возможность работать с каждым символом в качестве элемента Array - Затем используйте
map()
для обработки каждого элемента из двоичного в десятичное с помощьюpareseInt()
- Наконец, мы можем использовать
String.fromCharCode()
для преобразования каждого номера ASCII в соответствующий символ - Однако
fromCharCode()
ожидает серию чисел, а не массив! Мы можем использовать ES6 Spread Operator для передачи в массив чисел в виде отдельных чисел. См. Здесь для получения дополнительной информации; Оператор распространения
Связанные ссылки
ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:
- НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
- Добавьте объяснение своего решения.
- Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced .
- Пожалуйста, добавьте свое имя пользователя, только если вы добавили соответствующее основное содержимое . ( НЕ удаляйте существующие имена пользователей )
Увидеть
Wiki Challenge Solution Template
дляWiki Challenge Solution Template
для справки.