Учитывая положительное целое число n >= 1
, выведите первые n
строки следующей структуры:
#
# #
###
# #
# # #
## ##
#####
# #
# # #
# # # #
# ### #
## ##
## # ##
### ###
#######
n
-Й 1-индексированный строка является двоичным представлением n
, зеркальным без копирования последнего символа, с #
вместо 1 и <space>
вместо 0. Всех строк центрируются.
Вы должны выводить как ASCII-art, но вы можете использовать любой непробельный символ вместо того, где я использую #
в примере. Конечный пробел разрешен, а завершающий символ новой строки разрешен. Вывод должен выглядеть как пример, без лишних начальных пробелов или начальных строк.
Вы можете просмотреть первые 1023 ряда фрактального собора здесь .
Чтобы сгенерировать более крупные тесты, вот нерегламентированная эталонная реализация в Python
Ответы:
MATL , 10 байт
Попробуйте онлайн!
объяснение
источник
35*c
это 4 персонажа35
фиксированной? Это кажется немного конкретным. С другой стороны, некоторые задачи допускают любой символ, поэтому это может быть хорошей идеей. Как вы думаете,#
является наиболее распространенным?Zc
с символом35
, т.е.#
). Спасибо, @ ConorO'Brien!05AB1E , 9 байтов
Код:
Использует кодировку 05AB1E . Попробуйте онлайн!
Объяснение:
источник
Желе , 12 байт
Попробуйте онлайн!
источник
Python 2 , 92 байта
Попробуйте онлайн!
В Python 3
s=f'{x+1:0{len(bin(n))-2}b}'.replace(*'0 ')
он короче, но аргументыint(input())
вокругprint
аргумента увеличивают его до 95 байтов.источник
2**len(bin(n))/4
любом случаеJavaScript (ES6), 106 байт
Используется
1
как непробельный символ.демонстрация
Показать фрагмент кода
Альтернативная версия (тот же размер)
Без
Math.clz32()
:источник
Math.clz32
- я даже не знала, что она существует!Шелуха ,
212018 байтСпасибо @Zgarb за 2 байта!
Попробуйте онлайн!
Ungolfed / Пояснение
Чтобы избежать длинного заполнения, это определяет ширину фрактала, который задан как,
2*len(bin(N))-1
и генерирует все последовательности этой длины с символами#,_
('_' обозначает пробел).Поскольку декартова мощность генерируется по порядку, а двоичные числа тоже, это нормально. Все, что нам нужно сделать, чтобы получить фрактал на этом этапе, это отфильтровать все палиндромы, и это в основном так:
источник
Ṙ;
может быть справедливымR
иȯ
ненужным. Хорошая идея ответа!Mathematica, 94 байта
источник
Mathematica, 98 байт
Попробуйте в песочнице Wolfram !
⌊
И⌋
три байта каждый.Пока что этот подход отличается от других ответов с использованием фрактальной природы шаблона. Ключевой шаг
ArrayFlatten@{{0,#,0},{1,0,1},{1,#,1}}&
, который делает фрактальную вещь, лучше всего объясняется в форме изображения:Код повторяет этот шаг достаточное количество раз, чтобы получить как минимум n строк, затем обрезает лишние строки и отображает их корректно.
источник
Gaia , 11 байт
Попробуйте онлайн!
объяснение
источник
Python 2 ,
120118107 байтспасибо @luismendo, @officialaimm, @ Halvard-Hummel
Попробуйте онлайн!
источник
replace(*'0 ')
за 2 байтаC # (.NET Core) ,
192178 байт,168 + 23Спасибо TheLethalCoder за помощь.
Попробуйте онлайн!
Я уверен, что это может быть значительно уменьшено, скорее всего, при заполнении и обращении строки.
источник
x=>
байтов и заметив, что вам не нужно включать конечную точку с запятой.Enumerable.Range(1,x).Select(z
короче какnew int[x].Select((_,z)
(думаю это правильно). Поскольку вы используете Linq, вы должны включитьusing System.Linq;
в свой счетчик байтов. Вы также используете,Math
поэтому вы должны включитьusing System;
или полностью квалифицировать его. Обратите внимание, что это тогда короче, какnamespace System.Linq{}
,' '
вPadLeft
вызов, так как пробел по умолчанию.namespace System.Linq{}
Древесный уголь , 28 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Создайте список первых
n
натуральных чисел.Повторяйте, пока все элементы не станут равны нулю.
Выведите последнюю двоичную цифру каждого элемента списка в виде
или
#
.Перейти к предыдущему столбцу.
Разделите все элементы списка на два.
Как только левая половина была нарисована, отразите это.
источник
MapAssignRight(IntDivide, 2, q);
3 байта.J, 29 байт
Попробуйте онлайн!
объяснение
i.
целые числа до n, вход(#.^:_1)
преобразован в базу 2(],}.@|.)
строка за строкой ("1
выполняет эту часть), возьмите двоичное число (]
это тождество fn) и cat it (,
) с его reverse (|.
), где обратная сторона обезглавлена (}.
).' #'{~
преобразует1
s и0
s в хэши и пробелы.источник
#.inv
вместо#.^:_1
.n = 1
, вы не печатать ничего. В любом случае, вы можете сбрить несколько байтов с некоторыми изменениями, например, так' #'{~(,|.@}:)"1@#:@:>:@i.
(если вам разрешено отключить один, вы можете удалить еще 4 байта). В основном, используйте ловушку, потому что она работает как вилка, когда левый зубец,]
и используйте встроенный, в#:
котором AFAIK примерно такой же, как#.inv
. РЕДАКТИРОВАТЬ: я думаю, мой ответ достаточно похож, чтобы оправдать быть комментарием, дайте мне знать, если вы думаете, что это должен быть ответ самостоятельно.#:
и это не сработало, но я, должно быть, помнил неправильно, потому что вы правы, что это работает.2 #:
получишь только самую правую цифру. Монадические#:
функции так же, как#.inv
(или#.&:_1
). Это отличается от двоичного#:
, который дает столько цифр, сколько атомов в его левом аргументе.Протон , 95 байт
Попробуйте онлайн!
Слишком много ошибок, чтобы не было слишком много скобок ... Мне нужно исправить парсер ...
источник
SOGL V0.12 , 11 байт
Попробуй здесь!
источник
PHP,
98 97 9594 + 1 байтЗапустите как трубу с
-nR
или попробуйте онлайн . Используется1
как не пропуски.источник
$argn=1
и$argn=3
не является правильным, и$argn
основывается на 0 (задано было на основе 1)К (нгн / к) , 19 байт
Попробуйте онлайн!
источник
Python 2 , 93 байта
Попробуйте онлайн!
источник
Python 2 , 89 байт
Попробуйте онлайн!
источник
C (gcc) ,
146108105 байтПопробуйте онлайн!
Эта функция вызывается
f(n)
с количеством строкn
, используя восклицательный знак (!
) в качестве непробельного символа.Пояснение :
источник
--n&&o+p(n);o;
вместо--n?o,p(n),o:o;
иfor(;c++<n;puts(""))p(b);
вместоwhile(c++<n)p(b),puts("");
JavaScript (Node.js) ,
156149 байт-7 байт @ ConorO'Brien
Попробуйте онлайн!
Рекурсивная функция. К сожалению, JS не поддерживает реверсирование строки, поэтому при преобразовании ее в массив и обратно используется 19 байтов.
источник
[...b]
вместоb.split("")
; Вы также можете использовать.join``.substr(1)
вместо.join("").substr(1)
; наконец, я думаю, что вы можете использоватьs+1
вместоs+"1"
Perl 5 , 77 + 1 (-n) = 78 байт
Попробуйте онлайн!
Использование '1' вместо '#', потому что это экономит пару байтов.
источник
Stax , 8 байт
Запустите и отладьте его
Самый короткий ответ до сих пор. Использует код CP437 1 вместо
#
.ASCII эквивалент:
источник