Учитывая число n , сгенерируйте первые n столбцов этого шаблона:
#
# #
# # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
################################ ...
Высота столбца в (1-индексированном) n - это число конечных 0
битов в двоичном представлении n плюс один. В результате нижний слой заполнен каждым столбцом, второй - каждым вторым, третий - каждым четвертым и т. Д.
правила
- Вы можете вводить и выводить любым стандартным способом.
- Вы можете предположить, что ввод является целым числом от 1 до 999 включительно.
- Вывод может содержать любое количество пробелов, если шаблон не поврежден.
- Шаблон должен быть 1-индексирован и иметь тот же формат, что и здесь.
- Вы можете использовать любой отдельный непробельный символ вместо
#
, но вы не можете изменять пробел.
Контрольные примеры
1
#
2
#
##
3
#
###
4
#
# #
####
5
#
# #
#####
7
#
# # #
#######
32
#
# #
# # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
################################
Несколько больших тестовых случаев можно найти здесь .
счет
Это код-гольф , поэтому выигрывает самый короткий код в байтах на каждом языке.
#
?Ответы:
Python 2 , 54 байта
Попробуйте онлайн!
Печать с большим количеством пробелов. Каждый ряд с
i
обратным отсчетомn
повторяет последовательность2**i-1
пробелов, за которыми следует символ#
. Этот шаблон повторяется до ширины линейки, которая является входнойn
. Это делается путем умножения строки шаблона наn
и взятия первыхn
символов с[:n]
.Шаблон может быть создан путем форматирования строки для альтернативы равной длины.
Симпатичный метод нарезки длиннее.
источник
Python 3 , 74 байта
Попробуйте онлайн!
источник
a=2**len(bin(n))
72 байтаV ,
17, 16 байтовПопробуйте онлайн!
HexDump:
Спасибо @KritixiLithos за сохранение одного байта!
Этот алгоритм ужасно неэффективен, но теоретически он должен работать для любого размера ввода.
Он работает, генерируя первые n итераций следующего шаблона:
И затем отрубая все кроме первых n столбцов. Таким образом, это приведет к появлению тонны пробелов, но ОП сказал:
Объяснение:
источник
|
.JavaScript (ES6),
6158 байтБлагодаря @ETHProductions сохранено 1 байт, затем еще 2 байта, когда я увидел, что можно использовать любой символ.
Рекурсивное решение.
Тестовые случаи:
Показать фрагмент кода
Анимация:
Показать фрагмент кода
источник
c/2|0
чтобыc>>1
сохранить байты.APL (Дьялог) , 21 байт
Попробуйте онлайн!
'# '[
… `] Индексировать строку с⎕
получить вход⍳
что я много2⊥⍣¯1
преобразовать в двоичный файл, используя столько цифр, сколько необходимо (одно число в каждом столбце )⊖
перевернуть с ног на голову∨⍀
вертикальное кумулятивное уменьшение ИЛИ0⍪
конкатенировать нули сверху⊖
перевернуть вверх дном (то есть вернуться снова)1+
добавить один (для индексации на основе 1)источник
Желе ,
1110 байтПопробуйте онлайн!
1 байт, сохраненный после ОП, добавил ослабление, которым не должен быть персонаж
#
.источник
Октава, 45 байт
Попробуйте это на Octave Online!
Вместо
'#'
отпечатков'!'
.источник
PHP , 139 байт
Попробуйте онлайн!
источник
Джапт ,
2017 байтСохранено 3 байта благодаря @Shaggy и @ETHproductions
Попробуйте онлайн!
Объяснение:
Вход: 5
источник
l
n&-n
чтобы захватить только последние1
и все конечные0
sn
. Не уверен, что это поможет, но стоитC
8474 байтаUngolfed:
Тест с:
объяснение
Еще раз, рекурсия требует меньше символов в C, чем итерация, поэтому два цикла выражаются как два рекурсивных вызова.
Кроме того, C является отличным языком для трюков с булевыми выражениями, позволяя
#
решить, ставить ли пробел или a в выражении32+3*!(i&m)
. Пробел имеет значение ASCII 32, то#
есть ASCII 35, поэтому мы получаем пробел, если какой-либо из битов в маске установленi
.источник
int i,l,m
?Pyth , 15 байт
Попытайся!
объяснение
источник
Python 2 , 47 байт
Попробуйте онлайн!
источник
JavaScript (ES8), 71 байт
Функция padStart () была введена в ECMAScript 2017!
Показать фрагмент кода
JavaScript (ES6), 77 байт
Показать фрагмент кода
источник
Mathematica, 69 байт
источник
( WESRRICICSE ): 237 байтов
Хорошо. 'время плевать
Прежде всего, замените каждый
COUNTA(R1C:R[-1]C,R[1]C:R[1024]C)+1
на просто[i]
, для ввода. токен подсчитывает количество ячеек, не включая себя, которые содержат формулу, а затем добавляет одну, чтобы включить себя. Поскольку WESRRMICGSE перетаскивает формулу в соответствии с введенным вами вводом, этот токен всегда приводит к вводу.у нас есть:
Это гораздо более читабельно. Вы будете часто видеть
FLOOR(LOG([i],2),1)
токен, что означает просто взять ближайшую степень 2, которая меньше, чем число input ([i]
). например:4->4, 5->4, 6->4, 7->4, 8->8 ...etc
. Я заменю этоGS[[i]]
лучше. Разбивая условие if, мы проверяем, меньше ли строка или равна ей
GS[[i]]+3
, потому что высота всех линейок равна GS [[i]] + 1, при этом выбираются строки, равные высоте правитель.+1
для строк с 1 индексированием и+1
снова для смещения WESRRMICGSE.FALSE
Результат дает пустую ячейку ( «»), и истинные выходы результатаLEFT(REPT(REPT(" ",,FLOOR(POWER(2,LOG([i],2)-ROW()+2),1),1)-1) &"#",[i]),[i])
в настоящее время все еще редактирую, следите за обновлениями
источник
Haskell ,
6462 байтаПопробуйте онлайн! Пример использования:
f 10
.источник
к, 33 байта
Кажется, это работает только в интерпретаторе AW .
Версия ОК (которую вы можете попробовать онлайн), похоже, содержит ошибку, требующую небольшого изменения, чтобы она заработала:
источник
C #, 174 байта
Этот метод имеет два параметра: вход для длины линейки и вывод, который является линейкой в виде строки.
Golfed:
Отступ:
Попробуйте онлайн!
источник
Func<int, string>
сэкономить вам несколько байтов?Древесный уголь ,
2723 байтаПопробуйте онлайн! Ссылка на подробную версию кода. Изменить: 4 байта сохранены путем переключения на
JumpTo
.источник
JumpTo
(извините)J, 38 байт
Не хорошо. Lmk, если счетчик байтов выключен - я на своем телефоне.
источник
3
в начале не0|.@|:'#'#"0~1#.2~:/\i.#:@,]
Java (OpenJDK 8) , 91 байт
Попробуйте онлайн!
Ungolfed:
источник
CJam, 34 байта
Мех.
источник
C (gcc) , 70 байт
Попробуйте онлайн!
источник
n+~x
вместоn^x+1
Perl 5 , 60 + 1 (-n) = 61 байт
Попробуйте онлайн!
источник