Возьмите строку двоичных символов, разделенных пробелом, и преобразуйте ее в строку ASCII.
Например...
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100
Преобразовал бы в ...
Hello World
Двоичная строка будет храниться в переменной с именем s
.
Это задача кода-гольфа, поэтому выигрывает самое короткое решение.
ZX81
здесь.Ответы:
Руби,
3632Или 31
Оптимизация благодаря Chron
источник
.join""
на ,*""
чтобы сэкономить несколько символов. Вы также можете сделать это с помощью gsub вместо split + map + join, что-то вроде:s.gsub(/\w+ ?/){$&.to_i(2).chr}
(31 символ).s.gsub(/\d+./){$&.to_i(2).chr}
работает, и это 30 символов, я понятия не имею, почему это работает, хотя. Не.
должно соответствовать в последний раз, но это соответствует.JavaScript (ES6) 49
55 56 64Изменить Принятие предложения @bebe - спасибо
Edit2 Не знал о двоичном числовом литерале - спасибо @kapep
Edit3 Wow 6,
несохранено4байта thx @ETHproductionsОбъяснение в соответствии с просьбой в комментариях
String.replace
может принимать 2 аргумента:/\d+./g
: одна или несколько цифр, за которыми следует один другой символ - флаг g указывает на поиск в шаблоне более одного разаСтоит отметить, что в конце строки регулярное выражение соответствует последовательности цифр без пробела, в этом случае точка соответствует последней цифре. Попробуйте «123» .match (/ (\ d +) ./) для проверки.
(Тем не менее) один из самых многословных кусочков JavaScript когда-либо ...
(Назначение строки s не учитывается)
источник
s.replace(/\d+./g,x=>String.fromCharCode(parseInt(x,2)))
56s.replace(/\d+./g,x=>String.fromCharCode(eval("0b"+x)))
55/\d+./g,x=>
делает?eval('0b'+x)
на'0b'+x-0
4 байта.Bash + общие утилиты Linux, 25 байт
DC объяснение
m
для:m
макрос, если стек не пустойm
регистрацииПоскольку мы сначала помещаем всю двоичную строку в стек, когда мы выталкиваем каждое значение, мы получаем строку в обратном порядке. Поэтому мы используем
rev
утилиту, чтобы исправить это.Пример использования:
источник
PowerShell, 49
РЕДАКТИРОВАТЬ: не видел другой ответ PowerShell. Но, по сути, существует только один способ решения этой проблемы.
источник
C -
574338/3138-байтовая версия:
Или только 31 байт, если s является указателем:
Я не думаю, что это именно то, для чего и когда цикл должен использоваться ... но он работает.
источник
Пиф , 12
Обратите внимание, что s не является допустимой переменной в Pyth, поэтому я использовал Z вместо.
Объяснение:
Пример:
источник
id2
вместоv+"0b"d
? В любом случае это нечитаемо и круто.машинный код x86 на DOS - 22 байта
Поскольку в машинном коде нет реальных строковых переменных (и, в частности, переменных с именем "
s
"), я выбрал stdin в качестве входных данных.Вход NASM:
источник
Powershell (
5249)Простой цикл над двоичной строкой в $ s. Однако необходимость включить [convert] убивает мой счет.
РЕДАКТИРОВАТЬ: Есть действительно только один способ осуществить это в Powershell, вау. Мы с Джои получили одинаковый ответ, работая независимо!
Входные данные:
Выход:
источник
Mathematica, 52 байта
Ах, прекрасные имена функций Mathematica
источник
Perl
3332Изменить: обновленное решение, 32.
Предыдущее решение (33):
или
Тест:
источник
J (23)
Тест:
Объяснение:
источник
Гольфскрипт - 21
Вы можете проверить это здесь .
источник
Python shell
4440 символовСпасибо за помощь Гриффин .
источник
APL (15)
Тест:
Объяснение:
⍎s
: оценитьs
, превратив его в массив целых чисел. Массивы записываются в виде чисел , разделенных пробелами, поэтому это расколыs
.{
...}¨
: для каждого элемента:⍕⍵
: превратить число обратно в строку⍎¨
: оценить каждую отдельную цифру, давая цепочку2⊥
: расшифровка базы-2 с указанием чисел⎕UCS
: получить символ для каждого номераисточник
PHP (61)
источник
foreach(str_split($s,8)as$v)echo chr(bindec($v));
str_split($s,8)
не будет работать.foreach(explode(' ',$s)as$v)echo chr(bindec($v));
будет действительным, но я не планирую редактировать один из моих первых ответов PPGC, который в любом случае явно не в гольфе. Все равно спасибо!Вакх , 25 байт
Объяснение:
S,' 'j
разбить строку S на пустое пространство и преобразовать ее в блок (своего рода массив).:A=
получить предыдущий блок и передать его в переменную.(),A¨
для каждого элемента вÖ,2,10b
Считайте текущий элемент (обозначенный какÖ
) в базе 2 и преобразуйте его в базу 10.:c
получить предыдущее значение и распечатать как символисточник
GolfScript 23
Онлайн тест здесь .
источник
С - 63
поскольку в стандартной библиотеке C нет конвертера base 2: протестируйте здесь
edit: есть, я просто слишком глуп, чтобы знать об этом
источник
Длина цикла, закодированный Brainfuck, 49 байтов
Поскольку в Brainfuck нет переменных, я просто использовал вместо них стандартный ввод и вывод.
Код
32+
должен интерпретироваться интерпретатором как 32+
с. Просто замените их вручную, если ваш переводчик не поддерживает RLE.Расширенная (не RLE) версия: (91 байт)
Код предполагает, что EOF кодируется как 0.
объяснение
Используется следующий макет:
Где
x
байт ASCII для печати,a
это символ из стандартного ввода иflag
1, если этоa
был пробел.источник
Java 8: 60 байт
Использование лямбды в Java 8 (75 байт):
И если вы разрешите статический импорт (который некоторые здесь использовали), то это (61 байт):
Немного более короткая версия, использующая цикл for (60 байт):
источник
Clojure 63 (или 57)
All-Clojure подразумевает:
С взаимодействием Java:
REPL сессия:
источник
QBasic, 103
Какая? У нас нет причудливых двоично-десятичных функций здесь. Сделай сам!
Я считаю новую строку (которую я считаю необходимой, чтобы получить if-then-else без символа
END IF
) как один байт для каждого мета-поста . Я не знаю, будет ли QB64 в Windows принимать файл кода таким образом или нет. Вероятно, это не имеет большого значения.источник
NodeJS - 62
PHP - 75
источник
JavaScript 111
Это делает преобразование чисел без parseInt или eval. Читая строку в обратном направлении и считая биты, она устанавливает бит x, если он равен единице. Когда пробел найден, число преобразуется в символ и запускается новый номер 0 для установки битов.
источник
Groovy 64
источник
CJam, 11 байт
s не является именем переменной в юридической CJam, поэтому я выбрал N вместо.
Попробуйте онлайн.
Пример запуска
Как это работает
источник
Haskell - 48 (+13 импорт (?))
Вот моя первая попытка игры в гольф на Хаскеле.
Вам нужно импортировать Data.Char
использование (в ghci):
Объяснение:
источник
GNU Sed, 19 байтов
Вдохновленный отличным ответом @Digital Trauma.
Golfed
Тест
источник
Pyth, 7 байт (не конкурирует)
Принимает ввод в виде строки.
Попытайся!
источник
05AB1E , 4 байта (не конкурирующие)
Сохранено 3 байта благодаря @Emigna
Попробуйте онлайн!
источник
#CçJ
тоже работает. Хотя и в этой, и в вашей версии вам нужноð¡
вместо того,#
чтобы вводить можно только 1 символ.