Вдохновленный Создать бинарную стену
Учитывая список натуральных чисел, мы можем выписать их все друг над другом, например, так [2, 6, 9, 4]
:
0010
0110
1001
0100
Мы можем представить это как стену:
..#.
.##.
#..#
.#..
Однако это очень слабая стена, и она рухнула! Каждый 1
( #
) падает, пока не достигнет "земли" или другого 1
( #
). В 0
ы ( .
ы) присутствуют в местах , оставленных перемещаемых 1
с.
Это становится следующим:
....
....
.##.
####
Что переводится обратно в:
0000
0000
0110
1111
Который, как список чисел, является [0, 0, 6, 15]
.
Еще один тест
[10, 17, 19, 23]
Это становится:
01010
10001
10011
10111
который становится:
00000
10011
10011
11111
перевод обратно на:
[0, 19, 19, 31]
Вызов
Учитывая список натуральных чисел, примените это преобразование к списку. Ввод / вывод в виде списков натуральных чисел в любом приемлемом формате. Применяются стандартные лазейки.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
code-golf
number
binary
binary-matrix
HyperNeutrino
источник
источник
Ответы:
MATL , 4 байта
Попробуйте это на MATL Online
объяснение
источник
Python , 68 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 50 байт
Пояснение: Предположим, что два ряда стены были такими:
Результат должен быть таким:
Другими словами, первая строка становится И двух строк, а вторая строка ИЛИ двух строк. Это просто нужно повторить достаточно раз, чтобы все биты упали на дно.
источник
Желе , 9 байт
Попробуйте онлайн!
источник
Japt , 16 байт
Попробуйте онлайн! используя
-Q
флаг для форматирования результата массива.объяснение
источник
mì2 z3 mn z mì2
null
вместо пробелов. Так что это не похоже на работу. Иnull
сортируется справа от1
s, в отличие от пробелов, которые сортируются слева.Mathematica, 64 байта
это
\[Transpose]
Это преобразует входные данные (список чисел) в список списков цифр, дополняет их квадратной матрицей, транспонирует их, сортирует строки так, чтобы единицы "падали" вниз, транспонирует назад, затем преобразует обратно в числа ,
источник
Python 3.5 , 60 байт
Попробуйте онлайн!
Принимает участие как
f(2, 6, 9, 4)
. Предполагается, что ввод не пуст. Использует много распаковки кортежей .источник
Октава,
2925 байт4 байта сохранены благодаря @Stewie
источник
de2bi/bi2de
сохраняет 4 байта в октаве. Работает на octave-online.net.J , 13 байт
Попробуйте онлайн!
объяснение
источник
<convert from binary> <transpose> <sort each row> <transpose> <convert to binary> M
: первые две функции - это инверсии двух последних.05AB1E , 9 байтов
Попробуйте онлайн!
В некотором роде алгоритм отличается от Magic.
источник
ζ
, черт. Удалил мой, возьми мой +1.Дьялог АПЛ,
242119 байтПопробуйте онлайн! (изменено, поэтому TryAPL принимает его как действительный)
Как?
⎕
оцененный ввод (массивы разделены пробелом)2⊥⍣¯1⊢
преобразует каждый из аргументов в двоичный (транспонированный из того, что в вопросе)↓
превращает 2D массив в вектор векторов{⍵[⍋⍵]}¨
сортирует каждый из элементов вектора↑
снова превращает вектор векторов в двумерный массив2⊥
конвертировать из двоичного кода (поскольку он как бы транспонирует его, мы получаем правильный результат)источник
Dyalog APL (23 символа)
пример
Спасибо Захари за то, что поправили меня.
источник
(⊥⍣¯1)⍵
на⊥⍣¯1⊢⍵
. Кроме того, я не думаю, что вам нужна спецификация оси для split (↓[1]
=>↓
).⊥⍣¯1
действительно должен быть встроенным). И спасибо за то, что вы правильно поняли мое имя пользователя.JavaScript,
127125 байтПопробуйте онлайн
-2 байта благодаря шарлатану коров
источник
(1<<c)&e
может стать2**c&e
Python 2, 142 байта
... и все еще играю в гольф ... надеюсь - любая помощь оценена!
Большая часть этого для заполнения чисел нулями.
Более читабельно:
Это создает массив представлений двоичной строки, дополняет его, поворачивает на 90º по часовой стрелке, сортирует каждую строку, поворачивает ее назад на 90º, а затем создает целые числа из каждой строки.
источник