Вам будет дан номер x
, где 0 <= x <= 2^32 - 1
.
Вы должны вывести список чисел в десятичном виде после рекурсивного разбиения в двоичном формате.
Примеры:
Пример 1:
255 -> 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
Текущий список просто 255
.
Бинарное представление 255
is 1111 1111
. Разбив его, получим 1111
и 1111
, которые в десятичном виде 15
и 15
.
Мы добавим их в список, так что мы будем иметь 255 15 15
.
Теперь числа 15
и 15
будут служить входными данными, и эти числа должны быть разделены.
Делая это снова, мы получаем ( 3 3
от обоих 15
с): 255 15 15 3 3 3 3
.
Продолжая логику, окончательный список будет 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
. И так как 1
больше не может быть разделен, выход останавливается.
Пример 2:
225 -> 225 14 1 3 2 1 1 1 0
Стартовый список есть 225
.
Бинарное представление 225
is 1110 0001
. Разбив его, получим 1110
и 0001
, которые в десятичном виде 14
и 1
.
Добавив их в список, мы получим 225 14 1
.
Теперь числа 14
и 1
будут служить входными данными, и эти числа должны быть разделены.
Поскольку 1
это не разделяемый, вывод будет 225 14 1 3 2
.
Пример 3:
32 -> 32 4 0 1 0
Условия :
- Если число двоичных цифр нечетное, первое число будет иметь на двоее меньше двоичной цифры, чем следующее. Пример,
20 (10100)
будет разделен как10
и100
, с десятичным выводом, являющимся2
и4
. - Применяются стандартные правила лазейки.
0
s и1
s не распространяются дальше.- Сбой программы при попытке отобразить слишком много чисел является допустимым условием выхода.
источник
0
s, если длина нечетная?0
с.Ответы:
Pyth, 18 байт
Тестирование
Этот код делает что-то очень хитрое и умное с
u
оператором фиксированной точки Пита.Тело функции, которая является чем-то иным, чем просто
u
, довольно просто:Этот код удаляет 0 и 1, разбивает каждое число и добавляет ввод перед.
u
будет запускать эту функцию для предыдущего результата функции, пока результат не перестанет изменяться.Какое начальное значение
u
использует? Это умная часть: код не указывает, какое значение использовать, поэтому по умолчанию он используется для ввода. Но ввод не список чисел - это число. Pyth неявно приводит число в первый раз через цикл к диапазону числа -[0, 1, ..., Q-1]
. Это не похоже на результат, который мы хотим получить. К счастью,u
найдет правильный результат независимо от того, что является начальным вводом - желаемый вывод является единственной фиксированной точкой функции, и повторное применение всегда будет достигать ее.Давайте посмотрим на промежуточные значения программы с вводом
7
. Я выделил префикс результата, который гарантированно будет правильным, независимо от исходного ввода:7
(Неявно[0, 1, 2, 3, 4, 5, 6]
)[7,
1, 0, 1, 1, 1, 0, 1, 1, 1, 2]
[7, 1, 3,
1, 0]
[7, 1, 3, 1, 1]
Какой выход.
Упакованный Pyth, 16 байтов
Обратите внимание, что поскольку Pyth использует только диапазон ASCII 0-127, он может быть сжат с использованием 7-битной кодировки, а не 8-битной кодировки. Таким образом, вышеуказанная программа может быть упакована в 16 байтов. В результате получается программа:
HexDump:
Переводчик находится здесь . Предоставьте ввод в качестве аргумента командной строки.
Кодовая страница этого языка (Packed Pyth) является диапазоном 0-127 ASCII, и каждый символ представлен 7 битами, дополненными в конце. Таким образом, вышеприведенный нечитаемый hexdump представляет:
Но в 16 байтах.
источник
05AB1E ,
21201817 байтПопробуйте онлайн!
объяснение
источник
ʒ
- Эта новая кодовая страница ... С каких это пор 05AB1E Jelly? Мне нравитьсяJavaScript (ES6), 99 байт
Это выглядит слишком долго. Там может быть лучший способ получить правильный заказ.
демонстрация
Показать фрагмент кода
источник
Желе ,
2120 байт-1 байт, удалив монадическую цепочку, а затем столкнувшись с последствиями преобразования пустого списка из двоичного в последующий 0.
Монадическая ссылка, принимающая число и возвращающая указанный список.
Попробуйте онлайн!
Как?
источник
Java 7, 541 байт
Выполнение первоначального заказа приводило меня в замешательство, иначе это был бы простой цикл и принцип рекурсивного вызова. Тем не менее, забавная задача выяснить, сохраняя порядок.
Объяснение:
Тестовый код:
Попробуй это здесь.
Выход:
источник
Python 2 , 110 байт
Попробуйте онлайн!
источник
Сетчатка , 142 байта
Попробуйте онлайн!
источник
PHP, 132 байта
Попробуйте онлайн!
источник
Array( [0] => 225 [1] => 14 [2] => 1 [3] => 3 [4] => 2 [5] => 1 [6] => 1 [7] => 1 [8] => 0 )
когда это не так = 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1$argn
Эта переменная доступна, если вы запускаете PHP из командной строки с-R
параметром. Вот пример для ввода 255 Попробуйте онлайн!Рубин , 102 байта
Попробуйте онлайн!
источник
Рубин , 98 байт
Попробуйте онлайн!
Просто базовая оптимизация ответа Value Ink : используйте flat_map вместо map ... flatten и используйте
a==[]?a
вместо тогоa==[]?[]
источник