Для целого числа, n
которое удовлетворяет n > 0
, запишите его значение как нисходящий путь на основе его двоичного представления.
правила
- Первый (самый значимый) установленный бит всегда находится в верхнем левом углу.
- Когда следующий бит установлен (a
1
), нарисуйте символ («заполненный») на следующей строке в том же столбце, что и предыдущий нарисованный символ. Попробуйте использовать пробелы («пусто») для заполнения, но любой символ будет делать, если он всегда одинаков. - Когда следующий бит не установлен (a
0
), нарисуйте символ («заполненный») в той же строке непосредственно справа от предыдущего нарисованного символа. - Ваш код должен поддерживать числа по крайней мере с 20 значащими битами.
- Напишите полную программу, функцию, лямбду и т. Д., Но без фрагмента.
- Не допускаются начальные пробелы (или "пустые" символы) / строки
- Разрешено любое количество конечных пробелов (или «пустых» символов) / строк
- Допускается любой вид одномерного ввода: число, строка, массив логических значений и т. Д. Однако порядок битов не трогайте.
- Допускается любой вид визуального 2D-вывода: в stdout, строке (с любыми двумя различными значениями, представляющими «заполненный» и «пустой»), вы даже можете вывести матрицу, если хотите. Список чисел, кажется, трудно согласовать с правилом «без пробелов», но я открыт для него, если вы найдете способ его использовать. Примечание: если вы решили напечатать или вернуть строку, используемые символы должны быть символами ASCII в диапазоне кодовых точек [32-126].
- Стандартные лазейки запрещены.
- Это Codegolf, поэтому выигрывает самый короткий код.
Примеры
Вход: 1
*
Вход: 2
**
Вход: 3
*
*
Вход: 4
***
Вход: 5
**
*
Вход: 6
*
**
Вход: 7
*
*
*
Вход: 25
*
***
*
Вход: 699050
**
**
**
**
**
**
**
**
**
**
Ввод: 1047552
*
*
*
*
*
*
*
*
*
***********
Вход: 525311
**********
*
*
*
*
*
*
*
*
*
*
[1,0,1]
, да.9
это1001
я хотел бы мой вклад , чтобы быть0011
. Это нормально?1
первым - это часть задачи, и (пере) переместить этот бит будет тривиальным вызовом, поэтому я боюсь, что мне придется сказать вам «нет», @TonHospel. Вы можете удалить его из вашего ввода в программе, хотя.Ответы:
Желе , 8 байт
Монадическая ссылка, принимающая число в виде списка единиц и нулей (например,
13
is[1,1,0,1]
), возвращающего список списков единиц и нулей, где первый список является первой строкой.Попробуйте онлайн! или посмотрите отформатированный набор тестов
Как?
источник
MATL , 14 байтов
Создает графический вывод в виде пути, начинающегося с координат (0,0). Попробуйте это в MATL Online! Или посмотрите некоторые автономные примеры ниже:
Вход
7
:Выход:
Вход
699050
:Выход:
Если вы предпочитаете, вы можете увидеть путь в виде комплексных координат для 9 байтов :
Попробуйте онлайн!
объяснение
источник
MATL , 10 байт
Вводит массив двоичных цифр. Выводит матрицу.
Попробуйте онлайн!
объяснение
источник
Python 2 ,
1009981787366 байтПопробуйте онлайн!
Рекурсивная версия:
Python 2 ,
716967 байтПопробуйте онлайн!
источник
Древесный уголь ,
2220191110 байтПока только мой второй древесный уголь.
Принимает входные данные в виде двоичной строки (то есть
699050
как10101010101010101010
).-9 байт благодаря @Neil, предложившему вернуться назад.
Попробуйте онлайн.
Объяснение:
Прочитайте STDIN как строку в обратном порядке:
Зациклите его двоичные цифры в виде строк
ι
:Если
ι
приведенное число равно 1, напечатайте*
вверх, иначе напечатайте*
влево.источник
{}
s.Base
только стоит 1 байт , как вам не нужноCast
вообще:F⮌↨N²¿ι↑*←*
.-v
, поскольку Charcoal был задуман как язык для игры в гольф, и я добавил подробный режим, чтобы было проще набирать текст и понимать его. (Я могу добавить один, если вы хотите, хотя).-a
сокращенно--ast
, я добавил его (формат взят из PyTek btw), чтобы помочь мне понять сжатый код с минимальными усилиями: P (и это действительно помогает, когда вы случайно испортили порядок аргументов). Кроме того , не то, что-l
это отдельный вариант. (также просто-h
для справки / описания аргументов командной строки)C # (.NET Core) ,
155123120113101 байтСохранено 32 байта благодаря тому, что входные данные могут быть получены в виде массива битов.
Сохранено 7 байтов благодаря @auhmaan.
Сохранено 10 байтов благодаря @KevinCruijssen.
Попробуйте онлайн!
источник
+new string(' ',c)+"*"
на+"*".PadLeft(c)
(экономия 7 байт)?0
вместо*
:if(n[i++]<1){m+="*";c++;}
кif(n[i++]<1)m+=c++%1;
и"*".PadLeft(c);
к"0".PadLeft(c);
m+=
теперь может быть троичным, если:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
0
's' и использование троичного оператора действительно разумно! Я также исправил случай699060
, просто установив значениеc
в начало, я, скорее всего, пропустил это при проверке контрольных примеров.05AB1E ,
181714 байтовПопробуйте онлайн!
объяснение
05AB1E объяснение холста
источник
γ€gć¸s>«1IÔ·ÌΛ
должен сохранить 4 байта.Python 2 , 59 байт
Попробуйте онлайн!
Основано на решении TFeld .
источник
Haskell , 65 байт
Попробуйте онлайн!
Принимает ввод как список логических значений.
Карри PAKCS, 70 байт
Порт Хаскелла отвечает, но поскольку
<-
в Curry не работает, нам нужно создать вспомогательную функциюu
. Нам также нужно добавить пробел междуf
и.
так, чтобы Curry анализировал его как композицию, а не точку.Это также работает в MCC Curry, но не работает в Sloth Curry (единственном поддерживаемом TIO).
источник
Haskell ,
74706762 байтаПопробуйте онлайн! Принимает список нулей и единиц в качестве входных данных и возвращает разделенную строкой строку.
Вдохновленный ответом xnor .
источник
Эмоджикод , 251 байт
Попробуйте онлайн!
Это определенно не решение для игры в гольф, но нет ни одного живого человека, который бы считал код эмодзи языком игры в гольф. Тем не менее, в процессе подчинения себя ужасам, которые являются синтаксисом кода смайликов в попытках научить себя этому чудовищу языка, я был приятно удивлен тем, насколько мощным и эффективным он может быть 😀
Explaination:
источник
JavaScript (ES6), 48 байт
Тот же формат ввода / вывода и та же логика, что и в рекурсивной версии ниже.
Попробуйте онлайн!
Или 42 байта, если этот формат приемлем.
Рекурсивная версия, 56 байт
Принимает ввод как массив целых чисел (0 или 1). Используется
0
для заполненных и пространство для пустых.Попробуйте онлайн!
комментарии
источник
Утилиты Bash + GNU, 38
Здесь
^K
и^H
находятся буквальные символы управления вертикальной табуляции и возврата. Они плохо отображаются в браузерах, поэтому этот сценарий может быть воссоздан следующим образом:Запустить в терминале. Ввод осуществляется через STDIN.
Этот ответ может слишком сильно расширить спецификации - на самом деле в каждой строке вывода нет начальных символов - все позиционирование выполняется с помощью управляющих символов. Если это слишком большая часть, то выходные данные могут быть переданы по каналу
|col -x|tac
для дополнительных 11 байтов.источник
Пакетная, 113 байт
Принимает список битов в качестве аргументов командной строки. Использует
+
вместо того,*
потому что*
имеет особое значение внутри%s:...=...%
расширений.источник
Java 10,
100106 байтПринимает массив логических значений и возвращает строку (
0
s пустые,1
s заполнены). Попробуйте это онлайн здесь .Спасибо Оливье Грегуару за то, что он помог мне сыграть в гольф и предупредил меня о том, что мой формат вывода не соответствует спецификации.
Безголовая версия:
источник
{if(c){s+="\n";for(j=i;j-->0;)s+=0;}else++i;s+=1;}
{if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}
Java (JDK 10) , 83 байта
Попробуйте онлайн!
int[]
int[][]
источник
Haskell , 126 байт
Ввод в виде списка нулей и единиц. Преобразует число в смещение
x↦[1-x,x]
и вычисляет частичные суммы. Окончательный вывод выполняется с использованием двух вложенных списков.Попробуйте онлайн!
источник
R , 59 байт
Попробуйте онлайн!
Принимает ввод как массив битов.
Возвращает логическую матрицу
TRUE
и,FALSE
представляющую a*
и a, соответственно.
Также есть некоторые вещи в нижнем колонтитуле для печати матрицы, соответствующей спецификациям выше, для простоты тестирования.
источник
APL + WIN, 65 или 46 байт
Запрашивает ввод целого числа
или для числового вектора двоичного представления целого числа
при условии, что я правильно прочитал комментарии к определенным ответам и последний вход разрешен.
источник
Pyth, 23 байта
Попробуй здесь
объяснение
источник
Perl 5
-p
,5436 байтПопробуйте онлайн!
Сократите это после того, как я понял, что ввод может быть немного строкой.
источник
SmileBASIC,
645957 байтСтарший бит (знаковый бит) проверяется, и если он равен 1, позиция X увеличивается. Если бит знака меньше позиции X (то есть бит знака равен 0, а X не равен 0), позиция Y увеличивается.
Первое движение всегда будет горизонтальным, поэтому движение Y блокируется до окончания первого движения X. Это гарантирует, что позиция Y не увеличивается в течение первых 0 бит.
Затем N смещается влево, и это повторяется до тех пор, пока N не достигнет 0.
источник
Рубин , 63 байта
Попробуйте онлайн!
источник
Japt ,
1917 байтПринимает ввод как массив битов, например
[1,0,1]
, вывод"
вместо*
.Побрил два байта благодаря Оливеру .
Попробуйте онлайн!
источник
SpT
наTî
-î
аналогичноp
, за исключением того, что по умолчанию" "
. Кроме того, есть ярлык дляq
:¬
î
, конечно, очень удобно. Я часто проверяю шансы на использование ярлыков, но я все еще всегда скучаю по некоторым из них, большое спасибо за вашу помощь.Python 2, 113 байт
Не уверен, что это считается (он выводит массив каждой из строк), но если это так, тогда я изменю свой счетчик байтов на 103:
источник
TI-Basic (TI-84 Plus CE), 85 байт
Запрашивает логический список, возвращает матрицу 0 и 1.
Просматривает список, увеличивая X, если следующий «бит» равен 0, изменяя Y в противном случае, затем добавляя 1 к матрице в этом месте, и возвращает матрицу в конце.
TI-Basic - это токенизированный язык .
Prompt
,L
* 6, (перевод строки) * 12,1
* 5,→
* 7,X
* 5,Y
* 5,sum(
,L
* 5,{
,Ans
* 2,,
* 5,-
,+
* 3,dim(
* 3,(
* 4,For(
,I
* 3,2
,not(
,End
= 73 байтDelvar
,[A]
* 5 = 12 байтTI-Basic (TI-84 Plus CE), 56 байт
Те же процессы, что и выше, но с использованием графического вывода (ограничено размером экрана: 10 строк, 26 столбцов, максимум 10 1 и 25 0) вместо добавления в матрицу.
источник
Pyth, 30 байт
Попробуйте онлайн!
Использует
Перевод Python 3:"
вместо*
.источник
x86 .COM, 32 байта
источник
APL (Dyalog Classic) , 18 байт
Попробуйте онлайн!
источник