Herausforderung
Erstellen Sie eine Funktion oder ein Programm, das bei Angabe einer Ganzzahl size
Folgendes ausführt:
Wenn size
gleich 1 ist, wird ausgegeben
H H
HHH
H H
Wenn size
größer als 1, wird ausgegeben
X X
XXX
X X
wo X
ist die Ausgabe des Programms / der Funktion fürsize - 1
(Wenn Sie es vorziehen, können Sie den Basisfall entsprechen 0
, solange Sie in Ihrer Antwort angeben)
Die folgenden Ausgabeformate sind zulässig, je nachdem, was für Sie am bequemsten ist:
Eine Zeichenfolge der erforderlichen Struktur mit zwei unterschiedlichen Zeichen, die
H
und entsprechenspace
Ein zweidimensionales Array mit der erforderlichen Struktur, mit je zwei verschiedenen Werten entsprechen
H
undspace
Ein Array / Liste von Zeichenketten, mit einer Zeile des Ausgangssignals in jedem Strang, mit je zwei verschiedene Werte entsprechen
H
undspace
Führende Leerzeichen sind zulässig, solange in jeder Zeile eine konstante Anzahl von führenden Leerzeichen vorhanden ist. Die zwei verschiedenen Ausgabezeichen können von beliebigen Elementen abhängen, sofern sie unterschiedlich sind.
Geben Sie an, welches Ausgabeformat Ihr Code zurückgibt.
Testfälle
1
H H
HHH
H H
2
H H H H
HHH HHH
H H H H
H HH HH H
HHHHHHHHH
H HH HH H
H H H H
HHH HHH
H H H H
3
H H H H H H H H
HHH HHH HHH HHH
H H H H H H H H
H HH HH H H HH HH H
HHHHHHHHH HHHHHHHHH
H HH HH H H HH HH H
H H H H H H H H
HHH HHH HHH HHH
H H H H H H H H
H H H HH H H HH H H H
HHH HHHHHH HHHHHH HHH
H H H HH H H HH H H H
H HH HH HH HH HH HH HH HH H
HHHHHHHHHHHHHHHHHHHHHHHHHHH
H HH HH HH HH HH HH HH HH H
H H H HH H H HH H H H
HHH HHHHHH HHHHHH HHH
H H H HH H H HH H H H
H H H H H H H H
HHH HHH HHH HHH
H H H H H H H H
H HH HH H H HH HH H
HHHHHHHHH HHHHHHHHH
H HH HH H H HH HH H
H H H H H H H H
HHH HHH HHH HHH
H H H H H H H H
Das ist Code-Golf , also gewinnt die niedrigste Byte-Anzahl für jede Sprache!
quelle
Antworten:
Wolfram Language (Mathematica) , 46 Byte
Gibt ein 2D-Array von
0
s und1
s zurück.Probieren Sie es online!
quelle
Nest
(mehrmals) die Funktion mehrfach ausführen. Wie alle anderen Einreichungen (Jelly?) Ist TheArrayFlatten
... nun ja, eingebaut, aber es verhält sichFlatten[#,{{1,3},{2,4}}]
in diesem Fall ähnlich wie a . (hat nicht getestet)Canvas ,
1412 BytesProbieren Sie es hier aus!
Erläuterung:Wo
I
ist die Eingabe,X
ist das von der vorherigen Schleife erzeugte Muster ("H" für die erste Schleife) und<space>
ist der leere Raum in der ersten und dritten Reihe des Musters, implizit hinzugefügt von+
.-2 Bytes dank dzaima !
quelle
MATL ,
1211 BytesBei Eingabe
n
wird eine Matrix ausgegeben, die0
und enthältn
.Probieren Sie es online!
Um dies in eine Zeichenmatrix von
H
und ein Leerzeichen umzuwandeln, fügen Sieg72*c
den Header hinzu. Probieren Sie es auch online aus!Oder fügen Sie hinzu
]1YC
, um die Matrix grafisch anzuzeigen. Probieren Sie es bei MATL Online!Erläuterung
quelle
Stax ,
1615 BytesFühren Sie es aus und debuggen Sie es
Dies ist die ASCII-Darstellung des Programms mit Kommentaren. Dieses Programm baut das H seitwärts auf und transponiert am Ende einmal.
Bonus 14-Byte-Programm - verwendet seine Eingabe als Ausgabezeichen. Theoretisch würde dies bei 10 nicht die richtige Form ergeben, da es 2 Ziffern hat, aber der Versuch, es auszuführen, stürzt mein Browser ab.
quelle
Ruby , 72 Bytes
Die Ausgabe ist eine Liste von Zeichenfolgen, eine Zeichenfolge pro Zeile.
Probieren Sie es online!
quelle
Haskell , 50 Bytes
Probieren Sie es online!
Erzeugt ein Raster aus Nullen und Einsen. Ein Zeichen länger für Leerzeichen und Hs.
Haskell , 51 Bytes
Probieren Sie es online!
quelle
Jelly ,
171615 BytesDies ist ein vollständiges Programm, das ein 2D-Array mit 1 und 0 ausgibt.
Probieren Sie es online! oder siehe die Ausgabe mit H und Leerzeichen.
quelle
APL (Dyalog Classic) , 14 Byte
Probieren Sie es online!
⎕
ausgewerteter Eingang n,⍳⎕⍴3
alle n-Tupel mit Elementen von 0 1 22|
mod 2×/¨∘.≥⍨
Bilden Sie eine Matrix, indem Sie jedes Tupelpaar a und b vergleichen. Wenn alle Elemente von a ≥ den entsprechenden Elementen von b sind, ist es eine 1, andernfalls 0quelle
SOGL V0.12 , 13 Bytes
Probieren Sie es hier aus!
quelle
R , 64 Bytes
Probieren Sie es online!
Reduziert nach Kronecker-Produkt, als schamlose Portierung von Luis Mendos Antwort .
Die Fußzeile gibt das Ergebnis gut aus, dies ist jedoch eine anonyme Funktion, die ein
matrix
von1
fürH
und0
für Leerzeichen zurückgibt .quelle
Java (OpenJDK 9) , 135 Byte
Probieren Sie es online!
Gibt ein
int[][]
mit0
fürH
und1
für zurückspace
. Dies "schnitzt" tatsächlich eine Wand vonH
's, anstatt' s zu "stapeln"H
.Erklärungen
quelle
V , 22 Bytes
Probieren Sie es online!
Hexdump:
Dies ist im Grunde derselbe Ansatz wie der Sierpinski-Teppich und The Fractal Plus bei Anarchy Golf.
quelle
Python 2 , 70 Bytes
Probieren Sie es online!
Die Funktion gibt eine Liste von Zeichenfolgen aus.
Python 2 , 84 Bytes
Probieren Sie es online!
Verwendet dieselbe Vorlage wie andere 3 * 3-Fraktalmuster:
quelle
J ,
2522 BytesProbieren Sie es online!
quelle
Haskell,
73676455 BytesDies funktioniert nur mit der neuesten Version von
Prelude
, weil es exportiert<>
ausData.Semigroup
. Fügen Sie hier einen Import hinzu, um es auf TIO auszuführen: Probieren Sie es online aus!Edit: -9 Bytes dank @ Potato44.
quelle
(#)
,g#f=g<>f<>g
wenn Sie GHC 8.4 verwenden. Dies liegt daran,Semigroup
ist jetzt im Auftakt.Perl 5 ,
4644434140 Bytes1 basiertes Zählen. Verwendet
0
und1
fürH
und Raum, hat eine führende1
(Raum)Basierend auf einer klassischen Idee von mtve.
Probieren Sie es online!
quelle
\321
das nötig ist, jeder Charakter scheint zu funktionieren.//
und$'
kann auch ersetzen//g
und$`
, aber ich bin nicht sicher, ob es zu einer Verbesserung führt.\321
wurde.
(um ein weiteres fraktales Muster zu generieren). Aber ich habe das Bit-Komplement weggelassen, also brauche ich das natürlich nicht mehr. Ich habe//g
und $ `verwendet, damit ich den Code einfach von der Kommandozeile aus testen kann (//
und$'
nicht zu einem Gewinn führen kann, den ich sehe, das gewonnene Byte wird mit einem Leerzeichen oder!
erneut verschwendet )Vim -
665654 BytesA @ c H esc " r d ^ q c { ctrl-v } " a y g v r space g v d " a P P " a P V G " b y P g v ctrl-v $ d " a P . . G " b p q @ r
Die Eingabe wird als Zahl in den Puffer übernommen.
quelle
:set nowrap
um das Ergebnis zu sehen, für 4 und mehr.APL (Dyalog Unicode) ,
38SBCS mit 34 BytesDie Ausgabe ist ein zweidimensionales Array,
1
das H und0
Raum darstellt.Probieren Sie es online!
quelle
f←
Zeichen als 1 Byte und zählen jeden: codegolf.meta.stackexchange.com/questions/9428/... Es ist auch legal als Eingang nehmen aus⎕
, dh ersetzen⍣⍵
mit⍣⎕
und die äußeren dfn die Klammern fallen.1 1⍴1
kann als geschrieben werden⍪1
und dann werden die parens um den Bediener unnötig. Wenn Sie mit Zügen vertraut sind , können sie hier viel helfen.⍨
ist dein Freund:(⍵,(0×⍵),⍵)
=>(⍵,⍵,⍨0×⍵)
Kohle ,
3029 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Drucken Sie das Original
H
.Schleife über die ersten
size
Potenzen von 3.Bewegen Sie den Cursor zurück zum Ursprung.
Trim
Dies ist erforderlich, da sowohl der OriginaldruckH
als auch die Reflexion darunter den Cursor bewegen.Kopieren Sie die vorherige Iteration nach unten und erstellen Sie ein Domino.
Kopieren Sie das Ergebnis nach unten und rechts und erstellen Sie einen Tetromino.
Schneiden Sie die Leinwand auf eine
L
Triomino-Form.Spiegeln Sie die Leinwand horizontal und vertikal mit Überlappung, um die Iteration abzuschließen.
Holzkohle ist in einigen Fraktalen besser als in anderen. Hier ist eine ähnliche Idee, aber fast halb so groß:
Probieren Sie es online! Link ist eine ausführliche Version des Codes.
quelle
Python 2 , 143 Bytes
Probieren Sie es online!
-30 bytes dank rekursiv
Wrapper-Code ist für eine schöne Formatierung. Es funktioniert gut, wenn Sie es entfernen
quelle
PHP 7,
125109 BytesEin anderer Ansatz: Anstatt das Ergebnis rekursiv zu verschachteln und zu reduzieren, durchläuft dies nur die Zeilen und Spalten und verwendet eine dritte Schleife, um herauszufinden, ob
H
oder gedruckt werden soll_
.Bearbeiten: Es wurde viel gespart, indem die Zeilen- / Spaltenschleifen zu einer kombiniert wurden, obwohl es ein bisschen gedauert hat, bis die Verringerung für die innere Schleife korrekt war. Benötigt PHP 7 für den Power Operator.
Probiere sie online aus !
druckt das Ergebnis aus. Als Rohr mit laufen lassen
-nR
.qualifizierte Funktion,
147130 BytesGibt eine einzelne Zeichenfolge zurück. Führen Sie die Standardkonfiguration aus (Nein
php.ini
).quelle
%3==1
kann durch ersetzt werden%3&1
.Gelee , 25 Bytes
Probieren Sie es online!
Obwohl dies länger ist als die vorhandene Jelly-Übermittlung , wird versucht, jedes Zeichen unabhängig von der Koordinate zu generieren.
Insbesondere dann , wenn die Koordinate
jeweils.
(x,y)
(1-Indexierung), das erste Glied zurückkehrt0
und1
entsprichtH
undAußerdem werden die 5 Bytes
ị⁾ HY
für die Formatierung verwendet, sodass dieses Programm (20 Bytes) ebenfalls gültig ist (aber die Ausgabe sieht nicht so gut aus):quelle
T-SQL ,
267261 Bytesquelle
PHP 7, 153 Bytes
Führen Sie die Standardkonfiguration aus (Nein
php.ini
) oder versuchen Sie es online .quelle
Perl, 64 Bytes
Benötigt
-p
wird die Eingabe von stdin übernommen. Die Ausgabe ist ein H vonH
s.Probieren Sie es online!
quelle
-p
mehr zählen (ich denke, es ist zu nachsichtig für Perl, aber so ist es jetzt)PHP (5.6+), 94 Bytes
Wird mit der
-F
Befehlszeilenoption verwendet. Übernimmt die Standardeinstellungen des Interpreters (-n
). Funktioniert aufgrund des Netzbetreibers nicht mit Versionen vor 5.6.Beispielnutzung
Probieren Sie es online!
quelle
$s.$s.$s
statt$s.=$s.$s
. Und du brauchst nicht<?
mit-R
statt-F
.-R
Sie mir die vollständige Verwendung zeigen?-nF
:echo <input> | php -nR '<code>'
.-r
ist fast das gleiche:php -nr '<code>' <arguments>
.preg_filter
besteht darin, jede Zeile zu iterieren und dabei die Zeilenumbrüche beizubehalten, was ungefähr der Zeile entsprichtjoin("\n",array_map(function(){...},split("\n",$s.$s.$s)))
, aber deutlich weniger ausführlich ist. Ich hatte zunächststr_pad
aber geändert,sprintf
weil es ein Byte kürzer ist:'"\0".str_pad($$i++/$i&1?"\0":"",$i)."\0"'
CJam -
103978776 BytesDieses Programm führt eine recht ausführliche "handcodierte" Rekursion durch. Keine intelligenten Matrixmultiplikationen. Während der Rekursion befindet sich oben auf dem Stapel ein Array, in dem die Ausgabe der übergeordneten Aufrufe gesammelt wird. Direkt nach jedem Satz rekursiver Aufrufe muss die Ausgabe der rekursiven Aufrufe komprimiert werden, um sicherzustellen, dass die Ausgabe korrekt ist, wenn der Stapel am Ende des Programms linear gedruckt wird. Der Stapel der Argumente, die in der Rekursion übergeben werden, wird in der Variablen gespeichert
A
.Versuchen Sie es online
quelle
K (ngn / k) , 18 Bytes
Probieren Sie es online!
quelle
Japt , 23 Bytes
Probieren Sie es online!
Ausgepackt und wie es funktioniert
Verwenden des transponierten Musters
ist weitaus einfacher zu handhaben als das Originalmuster
H
, zumindest in Japt, wo dasI
mit String Repeat und Center-Padding gemacht werden kann.quelle
C ++ 11 - 138 Bytes
Ich bin mir jedoch nicht sicher, ob diese Antwort hier eine gültige Syntax hat.
Ungolfed mit Arbeitscode
quelle