Примечание: первая половина этой задачи происходит от предыдущей задачи Мартина Эндера « Визуализация битового переплетения» .
У эзотерического языка программирования зло есть интересная операция над байтовыми значениями, которую он называет «переплетением».
По сути, это перестановка восьми битов байта (не имеет значения, с какого конца мы начинаем считать, поскольку шаблон симметричен):
- Бит 0 перемещается в бит 2
- Бит 1 перемещается в бит 0
- Бит 2 перемещается в бит 4
- Бит 3 перемещается в бит 1
- Бит 4 перемещен в бит 6
- Бит 5 перемещен в бит 3
- Бит 6 перемещен в бит 7
- Бит 7 перемещен в бит 5
Для удобства приведем еще три представления перестановки. Как цикл:
(02467531)
Как отображение:
57361402 -> 76543210 -> 64725031
И как список пар сопоставления:
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]
После 8
переплетений байт по существу сбрасывается.
Например, соткать число 10011101
(которое находится 157
в базе 10) даст 01110110
(которое находится 118
в базе 10).
вход
Есть только 256
допустимые входные данные, а именно все целые числа между 0
и 255
включительно. Это может быть принято в любой базе, но она должна быть последовательной, и вы должны указать ее, если база, которую вы выбираете, не является базой десять.
Вы не можете дополнять нулями свои входные данные.
Выход
Вы должны вывести результат переплетения битов в любой базе, которая также должна быть последовательной и указана, если не в базовой десятке.
Вы можете обнулять свои выводы.
Связанный: Визуализация битового плетения
источник
Ответы:
Python 2.7,
44-> 36 байтисточник
|
вместо+
и маску после сдвига, тогда вы можете сбрить 8 байтов, удалив скобки.<strike></strike>
свой старый байтовый счет, чтобы показать прогресс :-)Зло, 3 персонажа
Попробуйте онлайн!
Входные данные находятся в базе 256 (например, ASCII), например, чтобы ввести цифру 63, введите ASCII 63, которая является
?
.Объяснение:
Это так похоже на обман.
источник
CJam,
1512 байтСпасибо FryAmTheEggman за сохранение 3 байта.
Вход в базу 2. Выход также в базу 2, дополненный до 8 бит нулями.
Проверьте это здесь.
объяснение
источник
MATL , 14 байтов
Ввод в десятичном виде. Выходной файл заполнен нулями.
Попробуйте онлайн!
объяснение
источник
Желе, 11 байт
Перевод ответа Мартина CJam. Попробуй это здесь.
источник
JavaScript (ES6), 30 байт
источник
J, 12 байт
Использует встроенную перестановку
A.
перестановку с индексом перестановки,6532
который соответствует операции битового плетения.использование
Ввод - это список двоичных цифр. Вывод представляет собой заполненный нулями список из 8 двоичных цифр.
объяснение
источник
Сетчатка , 39 байт
Вход и выход в базе 2, выход слева.
Попробуйте онлайн!
объяснение
Это только левый ввод с нулями.
+
Указывает на то, что этот этап повторяется до тех пор , пока строка перестает изменяться. Он соответствует началу строки, если в ней содержится менее 8 символов, и вставляет0
в эту позицию.Теперь для фактической перестановки. Прямое решение заключается в следующем:
Однако это мучительно долго и излишне. Я нашел другую формулировку перестановки, которую намного проще реализовать в Retina (
X
представляет собой обмен смежными битами):Теперь это гораздо проще реализовать:
Это просто соответствует двум символам и меняет их. Поскольку совпадения не перекрываются, это меняет местами все четыре пары.
Теперь мы хотим сделать то же самое снова, но мы хотим пропустить первый символ. Самый простой способ сделать это - потребовать, чтобы совпадение не начиналось с границы слова
\B
.источник
машинный код x86, 20 байт
В шестнадцатеричном виде:
Это процедура, принимающая ввод и возвращающая результат через регистр AL.
разборка
источник
C (небезопасный макрос), 39 байт
C (функция), 41 байт
C (полная программа), 59 байт
(возвращается через код выхода, поэтому вызывается с помощью
echo "157" | ./weave;echo $?
)C (полная программа соответствует стандартам), 86 байт
C (совместимая со стандартами полная программа без предупреждений компилятора), 95 байт
C (совместимая со стандартами полная программа без предупреждений компилятора, которая может считываться из аргументов или стандартного ввода и включает проверку ошибок / диапазонов), 262 байта
Сломать
Практически так же, как многие существующие ответы: сдвиньте биты на свои места с помощью
<<2
(*4
),<<1
(*2
),>>1
(/2
) и>>2
(/4
), затем|
все вместе.Остальное - не что иное, как разные вкусы варочной панели.
источник
Mathematica, 34 байта
Анонимная функция. Принимает список двоичных цифр и выводит дополненный список из 8 двоичных цифр.
источник
PowerShell v2 +, 34 байта
Перевод ответа @ LegionMammal978 . Полная программа. Принимает ввод через аргумент командной строки в виде двоичного числа, выводит в виде двоичного массива с нулевым дополнением.
"{0:D8}"-f
Часть использует стандартные строки числового формата предварять0
к входу$args
. Поскольку-f
оператор поддерживает использование массива в качестве входных данных, и мы явно сказали использовать первый элемент{0:
, нам не нужно делать обычное$args[0]
. Мы инкапсулируем эту строку в парены, а затем индексируем в ней[1,3,0,5,2,7,4,6]
ткачество. Результирующий массив остается в конвейере и вывод неявный.Примеры
(по умолчанию
.ToString()
для массива используется разделитель as`n
, поэтому выходные данные разделены символом новой строки)источник
Matlab,
494844 байтаПринимает ввод как строку двоичных значений. Выход дополнен. 4 байта сохранены благодаря @Luis Mendo.
Объяснение:
источник
V , 17 байт
Попробуйте онлайн!
Это берет ввод и вывод в двоичном виде. Большая часть количества байтов происходит от заполнения его нулями. Если заполнение ввода было разрешено, мы могли бы просто сделать:
Благодаря решению Мартина для метода обмена символами, например:
Объяснение:
источник
05AB1E,
1412 байтобъяснение
Вход в базу 10.
Выход в базу 2.
Заимствует перестановочный трюк из ответа CJam от MartinEnder
Попробуйте онлайн
источник
Pyth, 19 символов
Вход и выход являются основанием 2.
Далеко не эксперт Pyth, но, поскольку никто еще не ответил, я дал ему шанс.
Объяснение:
источник
Лабиринт ,
2726 байтовВход и выход в базе 2. Выход дополняется.
Попробуйте онлайн!
источник
UGL , 50 байтов
Попробуйте онлайн!
Неоднократно div-mod на 2, а затем
%
поменяйте местами,@
чтобы получить их в правильном порядке.Вход в базу-десять, выход в базу-два.
источник
VI, 27 байт
Где
<ESC>
представляет Escape персонажа. Ввод / вывод в двоичном формате, вывод дополняется. 24 байта в vim:источник
<ESC>
нужны помехи вокруг него. Я бы отредактировал, но я не могу найти еще 4 байта для изменения ...На самом деле, 27 байтов
Попробуйте онлайн!
Эта программа выполняет ввод и вывод в виде двоичной строки (выходные данные дополняются нулями до 8 бит).
Объяснение:
источник
JavaScript, 98 байт
Ввод принимается в base-2 в виде строки, вывод также в base-2 в виде строки
источник