Biorąc pod uwagę dodatnią liczbę całkowitą n >= 1
, wyślij pierwsze n
rzędy następującej struktury:
#
# #
###
# #
# # #
## ##
#####
# #
# # #
# # # #
# ### #
## ##
## # ##
### ###
#######
n
-Ty 1-indeksowany wiersz jest binarna reprezentacja n
, dublowane bez kopiowania ostatni znak, ze #
zamiast 1 i <space>
zamiast 0. Wszystkie wiersze są skupione.
Musisz wyprowadzać jako ASCII-art, ale możesz użyć dowolnego znaku spacji zamiast tego, którego używam #
w tym przykładzie. Końcowe białe znaki są dozwolone, a końcowy znak nowej linii jest dozwolony. Dane wyjściowe muszą wyglądać jak w przykładzie i nie mogą zawierać żadnych dodatkowych białych znaków ani nowych linii.
Można zobaczyć pierwsze 1023 wierszy fraktalnej katedry tutaj .
Aby wygenerować większe przypadki testowe, oto implementacja nieznanego odniesienia w Pythonie
Odpowiedzi:
MATL , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
35*c
ma 4 znaki35
stałym? To wydaje się trochę specyficzne. Z drugiej strony niektóre wyzwania pozwalają na dowolne zwęglenie, więc może to być dobry pomysł. Czy uważasz, że#
jest najczęstszy?Zc
, z charakterem35
, tj#
.). Dzięki, @ ConorO'Brien!05AB1E , 9 bajtów
Kod:
Wykorzystuje kodowanie 05AB1E .Wypróbuj online!
Wyjaśnienie:
źródło
Galaretka , 12 bajtów
Wypróbuj online!
źródło
Python 2 , 92 bajty
Wypróbuj online!
W Pythonie 3
s=f'{x+1:0{len(bin(n))-2}b}'.replace(*'0 ')
jest krótszy, aleint(input())
i wokółprint
argumentu pchamy go do 95 bajtów.źródło
2**len(bin(n))/4
)JavaScript (ES6), 106 bajtów
Używa
1
jako znaku spacji.Próbny
Pokaż fragment kodu
Alternatywna wersja (ten sam rozmiar)
Bez
Math.clz32()
:źródło
Math.clz32
- nawet nie wiedziałem, że istnieje!Łuska ,
212018 bajtówDzięki @Zgarb za grę w golfa z 2 bajtów!
Wypróbuj online!
Niegolfowane / Wyjaśnienie
Aby uniknąć długiego wypełniania, określa to szerokość fraktala podanego jako
2*len(bin(N))-1
i generuje wszystkie sekwencje tej długości za pomocą symboli#,_
(„_” oznacza spację).Ponieważ moc kartezjańska jest generowana w kolejności, a liczby binarne też są, to jest w porządku. Wszystko, co musimy zrobić, aby uzyskać fraktal w tym momencie, to odfiltrowanie wszystkich palindromów i to w zasadzie:
źródło
Ṙ;
może być sprawiedliwyR
iȯ
jest niepotrzebny. Niezły pomysł na odpowiedź!Mathematica, 94 bajty
źródło
Mathematica, 98 bajtów
Wypróbuj w piaskownicy Wolfram !
⌊
I⌋
są trzy bajty każda.Jest to inne podejście niż inne dotychczasowe odpowiedzi, wykorzystujące fraktalną naturę wzoru. Kluczowym krokiem jest
ArrayFlatten@{{0,#,0},{1,0,1},{1,#,1}}&
zrobienie części fraktalnych, najlepiej wyjaśnione w formie obrazka:Kod powtarza ten krok wystarczająco długo, aby uzyskać co najmniej n wierszy, a następnie przycina dodatkowe wiersze i ładnie je wyświetla.
źródło
Gaia , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 ,
120118107 bajtówdzięki @luismendo, @officialaimm, @ halvard-hummel
Wypróbuj online!
źródło
replace(*'0 ')
za 2 bajtyC # (.NET Core) ,
192178 bajtów168 + 23dziękuję TheLethalCoder za pomoc.
Wypróbuj online!
całkiem pewne, że można to znacznie zredukować, najprawdopodobniej podczas wypełniania i cofania sznurka.
źródło
x=>
do liczby bajtów i zauważ, że nie musisz dołączać średnika końcowego.Enumerable.Range(1,x).Select(z
jest krótszy, ponieważnew int[x].Select((_,z)
(myślę, że to prawda). Podczas korzystania z Linq należy uwzględnićusing System.Linq;
w swojej liczbie bajtów. Używasz również,Math
więc powinieneś go uwzględnićusing System;
lub w pełni go zakwalifikować. Zauważ, że jest to krótsze, ponieważnamespace System.Linq{}
,' '
wPadLeft
rozmowie, ponieważ spacja jest domyślna.namespace System.Linq{}
Węgiel drzewny , 28 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Utwórz listę pierwszych
n
liczb naturalnych.Powtarzaj, aż wszystkie elementy będą równe zero.
Wydrukuj ostatnią cyfrę binarną każdego elementu listy jako a
lub
#
.Przejdź do poprzedniej kolumny.
Podziel wszystkie elementy listy przez dwa.
Po narysowaniu lewej połowy, odzwierciedl ją.
źródło
MapAssignRight(IntDivide, 2, q);
oszczędność 3 bajtów.J, 29 bajtów
Wypróbuj online!
wyjaśnienie
i.
liczby całkowite do n, wejście(#.^:_1)
przekonwertowane na bazę 2(],}.@|.)
rząd po rzędzie ("1
czy ta część), weź liczbę binarną (]
to tożsamość fn) i cat it (,
) za pomocą jej reverse (|.
), gdzie odwrotna strona jest ścięta (}.
).' #'{~
konwertuje1
si0
si na hasze i spacje.źródło
#.inv
instead of#.^:_1
.n = 1
, you print nothing. Anyways, you can shave off a few bytes with a few changes like so' #'{~(,|.@}:)"1@#:@:>:@i.
(if you're allowed to be off by one you can remove 4 more bytes). Basically, use a hook because it performs just like a fork when the left tine is]
and use the built-in#:
which AFAIK is about the same as#.inv
. EDIT: I figure my answer is similar enough to warrant being a comment, let me know if you think it should be an answer of its own.#:
and it didn't work, but i must be remembering wrong because you're right that it does.2 #:
which will only get the right-most digit. Monadic#:
functions just like#.inv
(or#.&:_1
). This differs from dyadic#:
, which only gives as many digits as there are atoms in its left argument.Proton, 95 bytes
Try it online!
There are too many bugs to not have too many brackets... I need to fix up the parser...
źródło
SOGL V0.12, 11 bytes
Try it Here!
źródło
PHP,
98 97 9594+1 bytesRun as pipe with
-nR
or try it online. Uses1
as non-whitespace.źródło
$argn=1
and$argn=3
is not correct, and$argn
is 0-based (specified was 1-based)K (ngn/k), 19 bytes
Try it online!
źródło
Python 2, 93 bytes
Try it online!
źródło
Python 2, 89 bytes
Try it online!
źródło
C (gcc),
146108105 bytesTry it online!
This is a function
f(n)
called with the number of rowsn
, using an exclamation mark (!
) as non-whitespace character.Explanation:
źródło
--n&&o+p(n);o;
instead of--n?o,p(n),o:o;
andfor(;c++<n;puts(""))p(b);
instead ofwhile(c++<n)p(b),puts("");
JavaScript (Node.js),
156149 bytes-7 bytes by @ConorO'Brien
Try it online!
Recursive function. Unfortunately JS does not support reversing a string, so 19 bytes are used on turning it into an array and back.
źródło
[...b]
instead ofb.split("")
; you can also use.join``.substr(1)
instead of.join("").substr(1)
; finally, I think you can uses+1
instead ofs+"1"
Perl 5, 77 + 1 (-n) = 78 bytes
Try it online!
Using '1' instead of '#' because it saves a couple bytes.
źródło
Stax, 8 bytes
Run and debug it
Shortest answer so far. Uses CP437 charcode 1 in place of
#
.ASCII equivalent:
źródło