Geben Sie bei einer positiven Ganzzahl n >= 1
die ersten n
Zeilen der folgenden Struktur aus:
#
# #
###
# #
# # #
## ##
#####
# #
# # #
# # # #
# ### #
## ##
## # ##
### ###
#######
Die n
-te 1-indizierte Zeile ist die binäre Darstellung von n
, gespiegelt ohne Kopieren des letzten Zeichens, mit #
anstelle von 1 und <space>
anstelle von 0. Alle Zeilen sind zentriert.
Sie müssen als ASCII-Kunst ausgeben, können jedoch ein beliebiges Nicht-Leerzeichen anstelle dessen verwenden, was ich #
im Beispiel verwende. Ein nachgestelltes Leerzeichen und ein nachgestelltes Zeilenumbruchzeichen sind zulässig. Die Ausgabe muss wie im Beispiel aussehen und darf keine zusätzlichen führenden Leerzeichen oder führenden Zeilenumbrüche enthalten.
Sie können die ersten 1023 Reihen der fraktalen Kathedrale hier anzeigen .
Um größere Testfälle zu generieren, finden Sie hier eine Referenzimplementierung in Python
Antworten:
MATL , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
35*c
ist 4 Zeichen35
Festnetz? Das scheint ein bisschen spezifisch zu sein. Auf der anderen Seite erlauben einige Herausforderungen jedes Zeichen, so dass es eine gute Idee sein kann. Denken Sie, dass dies#
am häufigsten vorkommt?Zc
mit Zeichen35
, dh#
). Vielen Dank, @ ConorO'Brien!05AB1E , 9 Bytes
Code:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung:
quelle
Gelee , 12 Bytes
Probieren Sie es online!
quelle
Python 2 , 92 Bytes
Probieren Sie es online!
In Python 3
s=f'{x+1:0{len(bin(n))-2}b}'.replace(*'0 ')
ist es kürzer, aberint(input())
und Parens um dasprint
Argument schieben es auf 95 Bytes.quelle
2**len(bin(n))/4
sowieso)JavaScript (ES6), 106 Byte
Verwendet
1
als Nicht-Leerzeichen.Demo
Code-Snippet anzeigen
Alternative Version (gleiche Größe)
Ohne
Math.clz32()
:quelle
Math.clz32
- ich wusste nicht einmal, dass es existiert!Schale ,
212018 BytesVielen Dank an @Zgarb für das Golfen mit 2 Bytes!
Probieren Sie es online!
Ungolfed / Erklärung
Um langwieriges Auffüllen zu vermeiden, wird die Breite des Fraktals bestimmt, das als gegeben ist,
2*len(bin(N))-1
und alle Folgen dieser Länge mit den Symbolen erzeugt#,_
('_' bezeichnet ein Leerzeichen).Da die kartesische Potenz in der richtigen Reihenfolge erzeugt wird und auch die Binärzahlen sind, ist dies in Ordnung. Alles, was wir tun müssen, um das Fraktal zu diesem Zeitpunkt zu erhalten, ist, alle Palindrome herauszufiltern, und das ist im Grunde genommen alles:
quelle
Ṙ;
kann gerecht seinR
undȯ
ist unnötig. Schöne Antwortidee!Mathematica, 94 Bytes
quelle
Mathematica, 98 Bytes
Probieren Sie es am Wolfram Sandkasten ! Das
⌊
und⌋
sind jeweils drei Bytes.Es ist ein anderer Ansatz als die bisherigen Antworten, wobei die fraktale Natur des Musters verwendet wird. Der Schlüsselschritt ist
ArrayFlatten@{{0,#,0},{1,0,1},{1,#,1}}&
, was das Fraktale angeht, am besten in Bildform zu erklären:Der Code wiederholt diesen Schritt so oft, bis er mindestens n Zeilen enthält, schneidet dann die zusätzlichen Zeilen ab und zeigt sie gut an.
quelle
Gaia , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 ,
120118107 Bytesdanke @luismendo, @officialaimm, @ halvard-hummel
Probieren Sie es online!
quelle
replace(*'0 ')
für 2 BytesC # (.NET Core) ,
192178 Bytes168 + 23danke TheLethalCoder für die Hilfe.
Probieren Sie es online!
ziemlich sicher, dass dies um ein Vielfaches reduziert werden kann, am wahrscheinlichsten beim Auffüllen und Umkehren der Saite.
quelle
x=>
in die Byteanzahl einfügen und beachten, dass Sie das nachgestellte Semikolon nicht einschließen müssen.Enumerable.Range(1,x).Select(z
ist kürzer alsnew int[x].Select((_,z)
(ich denke das ist richtig). Bei der Verwendung von Linq solltenusing System.Linq;
Sie die Anzahl der Bytes berücksichtigen. Sie verwenden es auch,Math
um es einzuschließenusing System;
oder vollständig zu qualifizieren. Beachten Sie, dass dies dann kürzer ist alsnamespace System.Linq{}
,' '
in denPadLeft
Aufruf einfügen, da dies die Standardeinstellung ist.namespace System.Linq{}
Kohle , 28 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Erstellen Sie eine Liste der ersten
n
natürlichen Zahlen.Wiederholen, bis alle Elemente Null sind.
Gibt die letzte Binärziffer jedes Elements der Liste als
oder aus
#
.Zur vorherigen Spalte wechseln.
Teilen Sie alle Elemente der Liste durch zwei.
Sobald die linke Hälfte gezeichnet wurde, reflektiere sie.
quelle
MapAssignRight(IntDivide, 2, q);
3 Bytes gespart.J, 29 Bytes
Probieren Sie es online!
Erläuterung
i.
Ganzzahlen bis n, die Eingabe(#.^:_1)
konvertiert zu Basis 2(],}.@|.)
reihenweise ("1
erledigt diesen Teil), nimm die Binärzahl (]
ist die Identität fn) und katze sie (,
) mit ihrer Umkehrung (|.
), wobei die Umkehrung enthauptet wird (}.
).' #'{~
konvertiert das1
s und0
s in Hashes und Leerzeichen.quelle
#.inv
anstelle von verwenden#.^:_1
.n = 1
Sie drucken nichts. Wie auch immer, Sie können ein paar Bytes mit ein paar Änderungen abschneiden' #'{~(,|.@}:)"1@#:@:>:@i.
(wenn Sie um eins abschneiden dürfen, können Sie 4 weitere Bytes entfernen). Verwenden Sie im Grunde genommen einen Haken, da er sich wie eine Gabel verhält, wenn sich der linke Zinken befindet,]
und verwenden Sie das eingebaute, mit#:
dem AFAIK in etwa identisch ist#.inv
. EDIT: Ich denke, meine Antwort ist ähnlich genug, um einen Kommentar zu rechtfertigen. Lassen Sie es mich wissen, wenn Sie der Meinung sind, dass es eine eigene Antwort sein sollte.#:
und es hat nicht funktioniert, aber ich muss mich an etwas Falsches erinnern, weil du recht hast, dass es funktioniert.2 #:
was nur die am weitesten rechts stehende Ziffer ergibt . Monadic#:
funktioniert genauso wie#.inv
(oder#.&:_1
). Dies unterscheidet sich von dyadisch#:
, bei dem nur so viele Ziffern angegeben werden, wie Atome im linken Argument enthalten sind.Proton , 95 Bytes
Probieren Sie es online!
Es gibt zu viele Fehler, um nicht zu viele Klammern zu haben ... Ich muss den Parser reparieren ...
quelle
SOGL V0.12 , 11 Bytes
Probieren Sie es hier aus!
quelle
PHP,
98 97 9594 + 1 BytesLaufen Sie als Pipe mit
-nR
oder versuchen Sie es online . Verwendet1
als Nicht-Leerzeichen.quelle
$argn=1
und$argn=3
ist nicht korrekt und$argn
ist 0-basiert (angegeben wurde 1-basiert)K (ngn / k) , 19 Bytes
Probieren Sie es online!
quelle
Python 2 , 93 Bytes
Probieren Sie es online!
quelle
Python 2 , 89 Bytes
Probieren Sie es online!
quelle
C (GCC) ,
146108105 BytesProbieren Sie es online!
Dies ist eine Funktion,
f(n)
die mit der Anzahl der Zeilen aufgerufen wirdn
, wobei ein Ausrufezeichen (!
) als Nicht-Leerzeichen verwendet wird.Erklärung :
quelle
--n&&o+p(n);o;
statt--n?o,p(n),o:o;
undfor(;c++<n;puts(""))p(b);
stattwhile(c++<n)p(b),puts("");
JavaScript (Node.js) ,
156 bis149 Byte-7 Bytes von @ ConorO'Brien
Probieren Sie es online!
Rekursive Funktion. Leider unterstützt JS das Umkehren eines Strings nicht, so dass 19 Bytes verwendet werden, um ihn in ein Array und zurück zu verwandeln.
quelle
[...b]
anstelle von verwendenb.split("")
; Sie können auch.join``.substr(1)
anstelle von verwenden.join("").substr(1)
; Schließlich denke ich, Sie könnens+1
anstelle vons+"1"
Perl 5 , 77 + 1 (-n) = 78 Bytes
Probieren Sie es online!
Verwenden Sie '1' anstelle von '#', da dadurch ein paar Bytes gespart werden.
quelle
Stax , 8 Bytes
Führen Sie es aus und debuggen Sie es
Kürzeste Antwort bisher. Verwendet CP437-Zeichencode 1 anstelle von
#
.ASCII-Äquivalent:
quelle