Дан массив положительных целых чисел в базе 10, где n > 0
выведите их представление двоичной стены.
Как это работает?
- Преобразуйте каждое число в его двоичное представление.
- Дополните представление начальными нулями до длины самого длинного, т.е.
1, 2
->1, 10
->01, 10
. - Создайте стену, где
1
s - кирпичи, а0
s - кирпичи.
Стена - это блок символов, где любой печатный символ представляет кирпич, а пробел ( 32
) - недостающий кирпич. Вы можете выбрать любой символ для кирпича, он не должен быть четким по всей стене, если он не является пробелом. Отсутствующий символ кирпича должен быть пробелом. Для примера ниже я использовал *
для кирпичей.
пример
Входные данные:
[ 15, 7, 13, 11 ]
[ 1111, 111, 1101, 1011 ]
[ 1111, 0111, 1101, 1011 ]
Выход:
**** *** ** * * **
правила
- Ввод должен быть сделан в базе 10, если ваш язык принимает другие базы, вы не можете их использовать.
- Передние и новые строки разрешены.
- Входные данные могут быть приняты в виде списка целых чисел, отдельных аргументов или любого разумного формата.
- Вывод может быть в любом приемлемом формате: строка, разделенная новой строкой, массив строк, 2d массив и т. Д.
- Стандартные лазейки запрещены.
Тестовые случаи
Обратите внимание, что в первом тестовом случае все слои имеют пустой кирпичик в конце.
[ 14, 4, 6, 2 ]
***
*
**
*
[ 1, 2, 4, 8, 16 ]
*
*
*
*
*
[ 15, 11, 15, 15 ]
****
* **
****
****
[ 11, 10, 9, 8 ]
* **
* *
* *
*
Это код гольф, поэтому выигрывает самый короткий код!
[[1, " ", 1, " "], ...]
Ответы:
MATL , 5 байтов
Попробуйте онлайн!
объяснение
источник
42*
или что-то ...100
или какой-то другой номер?J , 8 байт
Попробуйте онлайн!
объяснение
источник
#:
почему это бьет Желе.Желе , 9 байт
Попробуйте онлайн!
РЕДАКТИРОВАТЬ: КАК J JELLY DAT НЕВОЗМОЖНО> _ <
источник
Октава, 22 байта
Попробуйте онлайн
Объяснение:
Сохранено несколько байтов благодаря Луису Мендо! Кроме того, я не заметил, что могу выбирать, с каким персонажем строить стену, не только
*
.Или с
de2bi
:Объяснение:
Следующие работы на TIO, на 7 байт больше:
Попробуй здесь
источник
Python 3 ,
88 84 71 7472 байтаЛямбда, которая возвращает список строк, представляющих каждую строку.
Попробуйте онлайн! (ссылка на разделенную новой строкой версию)
объяснение
lambda n:
- Создает (анонимную) лямбду с параметромn
. Возвращает неявно.[...]
- Создает список понимания.bin(x)[2:]
- Получает двоичные представления чисел..replace(*'0 ')
- Заменяет все вхождения0
с пробелом..rjust(len(bin(max(n)))-2)
- Добавляет двоичные представления к длине самого длинного.for x in n
- Перебираетn
, с переменнойx
.Изменения
-
1- 3 байта благодаря @Rod,-(...)+2
=2-(...)
, использованиюrjust()
bin()
Вместо этого добавлена версия , которая была недействительной, поскольку она не работала для1
и2
.Исправлена ошибка выше с использованиемformat()
.Изменен тип возвращаемого значения в список строк, потому что это было разрешено OP.
Исправлена еще одна ошибка с использованием
rjust()
и переключением обратноbin()
, определена и исправлена @Rod.источник
JavaScript (ES6),
8179 байтСохранено 2 байта с использованием цифр вместо символов для кирпичей, как это предложил Рик Хичкок
Возвращает 2D массив с 1 для кирпичей.
Контрольные примеры
Показать фрагмент кода
источник
Haskell ,
767574 байтаПопробуйте онлайн!
источник
05AB1E , 9 байтов
Попробуйте онлайн!
источник
b0ð:í.Bí»
9 байтов.Рубин,
6359 байт-4 байта с помощью Алексиса Андерсена
Попробуйте онлайн!
источник
n.max.to_s(2).size
с ,('%b'%n.max).size
и вы на самом деле не нужно , чтобы заменить1
с*
R 87
88байтСтеновые блоки представлены
8
множеством восьмерок.Попробуйте онлайн!
Входной список целых чисел преобразуется в массив битов, которые обрезаются из завершающих 0 бит и обращаются в обратном направлении.
Затем уменьшенный массив выводится с использованием
write
ширины столбца, которая была определена при обрезке массива.ifelse()
это единственный вариант IF, который работает с векторами, к сожалению.источник
1
вместо""
выходного файла вwrite
.Python 2 , 77 байт
Попробуйте онлайн!
источник
APL (Dyalog) ,
30222014 байтовСохранено 6 байт благодаря @ Adám
Попробуйте онлайн!
(предполагается,
⎕IO←0
что это по умолчанию на многих машинах)Это принимает входные данные в виде массива и возвращает матрицу с
*
s иs.
объяснение
источник
' *'[⍉2⊥⍣¯1⊢⎕]
¨
.T-SQL, 290 байт
Использует
1
для кирпича кусок, предполагает, что вход приходит из таблицы@
Ungolfed, с некоторым объяснением
источник
Mathematica, 40 байт
Кирпичи 1с
Mathematica, 48 байтов
Кирпичи #
источник
//.
. (/.
означает «заменить один раз»,//.
означает «продолжайте делать замену, пока вещь не перестанет меняться».)C # (.NET Core) ,
112 + 18 = 130,86 + 41 = 127 байт.Попробуйте онлайн!
Количество байтов включает 41 байт из
using System.Linq;using C=System.Convert;
. Используется1
как символ для стены. Тем не менее, это слишком долго, даже для C # ...источник
namespace System.Linq{}
чтобы сохранить несколько байтов. Является лиa.Max()
гарантировано , чтобы быть правдой (я уверен , что я просто не умный с двоичным: P)? Будет лиclass Convert{}
сохранить любые байты?using System.Linq;using C=System.Convert;
счетчик байтов, поскольку эти двеusing
директивы необходимы для компиляции кода.Сетчатка , 63 байта
Попробуйте онлайн! Объяснение:
Преобразовать в одинарный и суффикс a
<
.Преобразовать в двоичный файл
Как только все
<
s достигли влево, удалите их все.Вставьте пробел перед любым
<
s, которые уже достигли слева.Переместить все
<
влево на один шаг. Промыть и повторить.источник
PowerShell , 100 байт
Попробуйте онлайн!
Тьфу,
convert
бинарное в PowerShell так больно. Плюс.length
у вызовы на с пробелами, плюс долгое вызова , чтобы сделать их все-таки , все складывает в течение долгого представления.-replace
0
.padLeft()
.length
Гольф предложения, чтобы получить ниже 100 приветствуются.
источник
PHP, 84 байта
К счастью, битовая операция
log
приводит результат к int. поплавок не будет работать здесь.Попробуйте онлайн .
источник
Clojure, 185 байтов
Безголовая версия:
Анонимная функция, которая принимает аргумент в виде списка. Возвращает строки в виде списка.
Читая другие ответы, я уверен, что это может быть меньше.
clojure.string/replace
берет нецензурное количество символов, чтобы написать ..источник
Japt ,
3330 байтПопробуйте онлайн!
Сохранено 3 байта благодаря @Justin Mariner
объяснение
источник
-R
флаг (не добавленный к счетчику байтов), чтобы увидеть выход с присоединением новой строки: здесь .Python 3 ,
9290 байтПопробуйте онлайн!
Возвращает список строк. Складывание их показывает, что они действительно выровнены правильно.
Поломка
По сути преобразует массив в двоичный файл, а затем заменяет все 0 на пробелы.
N
количество пробелов добавляется в начале каждой строки, гдеN = [length of longest line] - [length of line]
.-1 bytes
Спасибо мистеру КодеруПопробуйте онлайн!
источник
'0',' '
на*'0 '
.Japt , 11 байт
Попробуйте онлайн!
объяснение
источник
z3 z
. Не уверен, почемуy y
там не работает, я посмотрю это позже ...Java 7,
13010888 байтСохранено 22 благодаря @TheLethalCoder Сохранено 20 благодаря @Xanderhall
Ungolfed:
источник
i
в,b[i]
чтобы сохранить байт. Вы можете сохранить вывод с помощью1
s, поэтому нет необходимости в.replace('1','*')
. Вместо этого используйте Java 8 и скомпилируйте в лямбду для сохранения байтов. Если вы не хотите этого делать, этоint[]b
экономит байт.i++
оценивает, аi
затем увеличивает его (тогда как++i
делает наоборот), так что вы можете переместитьi++
выход изfor
цикла и использоватьb[i++]
вместо этого. Да, и пока мы на нем, у вас есть только одна линия внутри петли, поэтому скобки не нужны.for(int x:i)
Кроме того, вы можете использоватьLong.toBinaryString
вместо целочисленной версии, чтобы сохранить 3 байта.Python 2, 217 байт
После 2 часов кодирования я решил, что numpy - плохая идея для этого
Использование в Ubuntu
Установить NumPy
Создать файл с именем
i
с вводом в формате14 4 6 2
Бег
источник
8-е ,
232254250 байтКод
Неуправляемая версия с комментариями
Эти слова должны вызываться последовательно (см. Пример)
Использование и примеры
Или более четко
источник
Pyth, 16 байт
Попробуй это здесь. Следите за завершающим пространством.
источник
Excel VBA,
170161 байтGolfed
Функция анонимного непосредственного окна VBE, которая принимает ввод формата
1 2 3 .. n
из диапазона[A1]
и выводит соответствующую двоичную стенку в непосредственное окно VBE через диапазон[B1,C1,2:2]
отформатирован:
Ungolfed
Полная
Sub
процедура, которая принимает ввод форматаArray(1, 2, 3...)
и выводит соответствующую двоичную стенку в окно VBE Immediate через диапазон[A1,B1,2:2]
источник
Древесный уголь , 20 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Работает путем ручного преобразования каждого входного числа в двоичное, но распечатывает его в порядке справа налево. Я воспринимаю ввод как строку, оканчивающуюся новой строкой, так как Charcoal не имеет хорошего способа ввода списков, иначе я бы написал что-то вроде этого, которое, к сожалению, в настоящее время занимает 21 байт:
Попробуйте онлайн! Ссылка на подробную версию кода. Эта версия векторизируется над входным массивом, хотя его выходные данные жестко закодированы в
-
s, что сохраняет байт.источник