Erstellen Sie ein "H" aus kleineren "H"


73

Herausforderung

Erstellen Sie eine Funktion oder ein Programm, das bei Angabe einer Ganzzahl sizeFolgendes ausführt:

Wenn sizegleich 1 ist, wird ausgegeben

H H
HHH
H H

Wenn sizegrößer als 1, wird ausgegeben

X X
XXX
X X

wo Xist 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 Hund entsprechenspace

  • Ein zweidimensionales Array mit der erforderlichen Struktur, mit je zwei verschiedenen Werten entsprechen Hundspace

  • Ein Array / Liste von Zeichenketten, mit einer Zeile des Ausgangssignals in jedem Strang, mit je zwei verschiedene Werte entsprechen Hundspace

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 , also gewinnt die niedrigste Byte-Anzahl für jede Sprache!

code-golf  ascii-art  fractal  code-golf  code-golf  string  code-golf  string  matrix  code-golf  graph-theory  maze  binary-matrix  code-golf  kolmogorov-complexity  random  code-challenge  metagolf  test-battery  brain-flak  text-processing  code-golf  matrix  code-golf  number-theory  primes  code-golf  string  matrix  code-golf  binary  bitwise  code-golf  number  factorial  floating-point  code-golf  number  sequence  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-golf  string  code-golf  math  decision-problem  number-theory  integer  code-golf  number  decision-problem  functional-programming  code-golf  array-manipulation  matrix  code-golf  string  classification  string  code-challenge  binary  compression  decode  code-golf  string  string  code-challenge  balanced-string  encode  code-golf  number-theory  integer  base-conversion  code-golf  math  number-theory  geometry  abstract-algebra  code-golf  array-manipulation  sorting  optimization  code-golf  math  geometry  image-processing  generation  code-golf  string  cops-and-robbers  repeated-transformation  grammars  cops-and-robbers  repeated-transformation  grammars  code-challenge  restricted-source  tips  source-layout  javascript  code-challenge  kolmogorov-complexity  restricted-source  code-golf  combinatorics  counting  math  fastest-code  linear-algebra  code-golf  math  permutations  matrix  linear-algebra  code-golf  string  decision-problem  restricted-source  code-golf  number  array-manipulation  subsequence  code-golf  number  array-manipulation  matrix  code-golf  brainfuck  code-golf  color  code-golf  quine  source-layout  code-golf  subsequence  code-golf  string  ascii-art  code-golf  string  ascii-art  alphabet  code-golf  decision-problem  interpreter  hexagonal-grid  halting-problem  code-golf  string  polynomials  calculus  code-golf  math  decision-problem  matrix  complex-numbers  code-golf  random  code-golf  number  arithmetic 

4
Perfekt für Holzkohle wahrscheinlich ... lol. Willkommen auch bei PPCG! : D
HyperNeutrino

10
Willkommen bei PPCG. Schöne erste Herausforderung!
Adám

Dürfen wir 0-basierte Größen verwenden?
Adám


1
Ich würde dies ein "Sierpinski H" nennen
mbomb007

Antworten:


28

Wolfram Language (Mathematica) , 46 Byte

Nest[ArrayFlatten@{r={#,0,#},{#,#,#},r}&,1,#]&

Gibt ein 2D-Array von 0s und 1s zurück.

Probieren Sie es online!

Verschachteln Sie [ArrayFlatten @ {r = {#, 0, #}, {#, #, #}, r} &, 1, #] & [3] // MatrixForm

Verschachteln Sie [ArrayFlatten @ {r = {#, 0, #}, {#, #, #}, r} &, 1, #] & [5] // Image


17
was zum Teufel hat Mathematica natürlich ein eingebautes für rekursiv verschachtelte Arrays lol. +1
HyperNeutrino

1
@HyperNeutrino gut offensichtlich
ASCII

7
@HyperNeutrino Wie wird das als eingebaut angesehen? Einfach Nest(mehrmals) die Funktion mehrfach ausführen. Wie alle anderen Einreichungen (Jelly?) Ist The ArrayFlatten... nun ja, eingebaut, aber es verhält sich Flatten[#,{{1,3},{2,4}}]in diesem Fall ähnlich wie a . (hat nicht getestet)
user202729

6
Es ist ein eingebautes dafür, aber länger. Mathematica hat lange Funktionsnamen.
Alephalpha

1
Wie konnte es nicht, angesichts seines Triumphs bei der Herausforderung des Aufschwungs ?
14.

21

Canvas , 14 12 Bytes

H;[⌐⌐∔*×∔;3*+

Probieren Sie es hier aus!

Erläuterung:
Code    |Instruction                                                         |Stack
--------+--------------------------------------------------------------------+-------------------------
        |Push input to stack (implicit)                                      |I
H       |Push "H" to stack                                                   |I,"H"
;      |Swap the top two stack items                                        |"H",I
[      |The following ToS (input) times:                                    |X
    ⌐⌐  |Duplicate ToS (result from last loop ("H" if first loop)) four times|X,X,X,X,X
    ∔   |Join vertically                                                     |X,X,X,X\nX
    ×   |Prepend                                                             |X,X,XX\nX
    ∔   |Join vertically                                                     |X,X\nXX\nX
    ;  |Swap top two stack items                                            |X\nXX\nX,X
    3*|Repeat three times vertically                                       |X\nXX\nX,X\nX\nX
    +  |Join horizontally                                                   |X<space>X\nXXX\nX<space>X
        |End loop (implicit)                                                 |X
        |Print ToS (implicit)                                                |

Wo Iist die Eingabe, Xist 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 !


Erstaunlich kurze Antwort: O
NL628

19

MATL , 12 11 Bytes

t:"[ACA]BX*

Bei Eingabe nwird eine Matrix ausgegeben, die 0und enthält n.

Probieren Sie es online!

Um dies in eine Zeichenmatrix von Hund ein Leerzeichen umzuwandeln, fügen Sie g72*cden 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

t          % Input (implicit): n. Duplicate
:          % Range. Gives the array [ 1 2 ... n]
"          % For each (that is, do n times)
  [ACA]    %   Push the array [5 7 5]
  B        %   Convert to binary. Gives the 3×3 matrix [1 0 1; 1 1 1; 1 0 1]
  X*       %   Kronecker product
           % End (implicit). Display (implicit)

16

Stax , 16 15 Bytes

╛c_mê║6{│◙ÖmπV"

Fü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.

'H]                 ["H"]
   {         },*    repeat block specified number of times
    c               copy the matrix
     {3*m           triplicate each row
         |S         surround; prepend and append like b + a + b
           |C       horizontally center rows with spaces
                M   transpose back to original orientation
                 m  output each row

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.


11

Ruby , 72 Bytes

Die Ausgabe ist eine Liste von Zeichenfolgen, eine Zeichenfolge pro Zeile.

f=->n{n<1?[?H]:[*a=(x=f[n-1]).map{|i|i+' '*i.size+i},*x.map{|i|i*3},*a]}

Probieren Sie es online!


Gut gemacht! Bei tio sieht die Ausgabe zunächst falsch aus, beim Verkleinern ist sie jedoch in Ordnung.
Eric Duminil



9

APL (Dyalog Classic) , 14 Byte

×/¨∘.≥⍨2|,⍳⎕⍴3

Probieren Sie es online!

ausgewerteter Eingang n

,⍳⎕⍴3 alle n-Tupel mit Elementen von 0 1 2

2| 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 0



8

R , 64 Bytes

function(n)Reduce(`%x%`,rep(list(matrix(c(1,1,1,0,1,0),3,3)),n))

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 matrixvon 1für Hund 0für Leerzeichen zurückgibt .


8

Java (OpenJDK 9) , 135 Byte

n->{n+=Math.pow(3,n)-n;int s=1,H[][]=new int[n][n],x,y;for(;s<n;s*=3)for(x=n;x-->0;)for(y=n;y-->0;)H[x][y]|=~(x/s%3)&y/s%3&1;return H;}

Probieren Sie es online!

Gibt ein int[][]mit 0für Hund 1für zurück space. Dies "schnitzt" tatsächlich eine Wand von H's, anstatt' s zu "stapeln" H.

Erklärungen

n->{                        // An int to int[][] lambda function
  n+=Math.pow(3,n)-n;       //  change n to 3^n, through +=...-n to avoid an explicit cast
  int s=1,                  //  size of the carvings.
      H[][]=new int[n][n],  //  the 2D array to return, filled with 0s
      x,                    //  counter for the 2D array
      y;                    //  counter for the 2D array
  for(;s<n;s*=3)            //  for each size
    for(x=n;x-->0;)         //   for each row
      for(y=n;y-->0;)       //    for each column
        H[x][y] |=          //     assign 1 to a cell of the array if...
           ~(x/s%3)         //      it is located in the "holes" of the H
          &y/s%3            //
          &1;               //      
  return H;                 //  return the array
}                           // end the lambda

Sparen Sie 5 Bytes, indem Sie einen statischen Import für Math.pow
Selim am

4
@Selim Der statische Import wird in der Byteanzahl benötigt. Ich würde also ... 19 Bytes verlieren.
Olivier Grégoire



6

J , 25 22 Bytes

,./^:2@(*/#:@5 7 5)^:]

Probieren Sie es online!

        */               multiply by
          #:@5 7 5       the binary matrix shaped like H
,./^:2                   assemble the 4-dimensional result into a matrix
                   ^:]   do it input times

6

Haskell, 73 67 64 55 Bytes

g#f=g<>f<>g
w=map.(id#)
(iterate(w(>>" ")#w id)["H"]!!)

Dies funktioniert nur mit der neuesten Version von Prelude, weil es exportiert <>aus Data.Semigroup. Fügen Sie hier einen Import hinzu, um es auf TIO auszuführen: Probieren Sie es online aus!

g#f=              -- function # takes two functions g and f and a list s
                  -- and returns
   g <> f <> g    -- g(s), followed by f(s) and another g(s)

w=                -- w takes a function and a list of lists
                  -- (both as unnamed parameters, because of pointfree style,
                  -- so let's call them f and l)
  map.(id#)       -- return map(id#f)l, i.e. apply (id#f) to every element of l

  w(>>" ")#w id   -- this partial application of # is a function that
                  -- takes the missing list (here a list of lists)
                  -- remember: (>>" ") is the function that replaces every element
                  -- of a list with a single space

iterate(   )["H"] -- starting with a singleton list of the string "H"
                  -- which itself is a singleton list of the char 'H'
                  -- repeatedly apply the above function
              !!  -- and pick the nth iteration



Example for ["H H", "HHH", "H H"], i.e.

   H H
   HHH
   H H

call the iterated function:
                    ( w(>>" ")         # w id       ) ["H H","HHH","H H"]

expand w:           ( map(id#(>>" "))  # map(id#id) ) ["H H","HHH","H H"]

expand outermost #: map(id#(>>" "))["H H","HHH","H H"] ++
                    map(id#id)     ["H H","HHH","H H"] ++
                    map(id#(>>" "))["H H","HHH","H H"]

expand map:         [(id#(>>" "))"H H",   (id#(>>" "))"HHH",   (id#(>>" "))"H H"] ++
                    [(id#id)     "H H",   (id#id)     "HHH",   (id#id)     "H H"] ++
                    [(id#(>>" "))"H H",   (id#(>>" "))"HHH",   (id#(>>" "))"H H"]

expand other #:     ["H H"++"   "++"H H", "HHH"++"   "++"HHH", "H H"++"   "++"H H"] ++
                    ["H H"++"H H"++"H H", "HHH"++"HHH"++"HHH", "H H"++"H H"++"H H"] ++
                    ["H H"++"   "++"H H", "HHH"++"   "++"HHH", "H H"++"   "++"H H"]

collaps ++:         ["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"]

which is printed line by line: 

  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

Edit: -9 Bytes dank @ Potato44.


3
Sie sollten Golf spielen können (#), g#f=g<>f<>gwenn Sie GHC 8.4 verwenden. Dies liegt daran, Semigroupist jetzt im Auftakt.
Potato44

@ Potato44: Ich bin mir ziemlich sicher, dass dies bei vielen Herausforderungen helfen wird. Vielen Dank!
Nimi

5

Perl 5 , 46 44 43 41 40 Bytes

1 basiertes Zählen. Verwendet 0und 1für Hund Raum, hat eine führende 1(Raum)

say//,map/$'/^1,@;for@;=glob"{A,.,A}"x<>

Basierend auf einer klassischen Idee von mtve.

Probieren Sie es online!


1
Die Ausgabe für n ≥ 3 ist nicht ganz richtig.
Primo

@primo Das Programm war korrekt, aber TIO verwendet die UTF-8-Version der Sonderzeichen. Ich habe den Link repariert, um stattdessen Escape-Zeichen zu verwenden, aber das Programm funktioniert immer noch, wenn Sie die tatsächlichen wörtlichen Zeichen verwenden
Ton Hospel

Ich habe keine Ahnung warum \321das nötig ist, jeder Charakter scheint zu funktionieren. //und $'kann auch ersetzen //gund $`, aber ich bin nicht sicher, ob es zu einer Verbesserung führt.
Primo

1
@primo Danke! Ich habe immer noch mit Code gearbeitet, der aus der alten mtve-Lösung stammt, für die das Bitkomplement verwendet \321wurde .(um ein weiteres fraktales Muster zu generieren). Aber ich habe das Bit-Komplement weggelassen, also brauche ich das natürlich nicht mehr. Ich habe //gund $ `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 )
Ton Hospel

5

Vim - 66 56 54 Bytes

A @ 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.


Was muss ich ausgehend von einer Bash-Eingabeaufforderung eingeben, wenn ich vim installiert habe, um das Ergebnis zu sehen?
Fabien

Geben Sie vim ein, drücken Sie die Eingabetaste, geben Sie die Eingabenummer (z. B. 3) in den Puffer ein und drücken Sie dann im normalen Modus die Tastenfolge des Postens.
Chiel ten Brinke

Stellen Sie sicher, Vanille Vim
Chiel Ten Brinke

Der Code enthielt einen Tippfehler. Einfach behoben.
Chiel ten Brinke

1
Funktioniert! <kbd> I </ kbd> ist ein Großbuchstabe i, nicht ell. :set nowrapum das Ergebnis zu sehen, für 4 und mehr.
Fabien

4

APL (Dyalog Unicode) , 38 SBCS mit 34 Bytes

({(⍵,(0×⍵),⍵){⍺⍪⍵⍪⍺}⍵,⍵,⍵}⍣⎕)1 1⍴1

Die Ausgabe ist ein zweidimensionales Array, 1das H und 0Raum darstellt.

Probieren Sie es online!


2
Willkommen bei PPCG! Sie können weglassen 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.
ngn

Vielen Dank! Ich habe APL noch nie zuvor offiziell als Golfspieler eingesetzt, daher sollten diese hier Abhilfe schaffen.
MJacquet

1 1⍴1kann als geschrieben werden ⍪1und dann werden die parens um den Bediener unnötig. Wenn Sie mit Zügen vertraut sind , können sie hier viel helfen.
ngn

Also, ist dein Freund: (⍵,(0×⍵),⍵)=>(⍵,⍵,⍨0×⍵)
Zacharý

4

Kohle , 30 29 Bytes

HFENX³ι«J⁰¦⁰C⁰ιCιιT⊗ι⊗ι‖OO→↓ι

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

H

Drucken Sie das Original H.

FENX³ι«

Schleife über die ersten sizePotenzen von 3.

J⁰¦⁰

Bewegen Sie den Cursor zurück zum Ursprung. TrimDies ist erforderlich, da sowohl der Originaldruck Hals auch die Reflexion darunter den Cursor bewegen.

C⁰ι

Kopieren Sie die vorherige Iteration nach unten und erstellen Sie ein Domino.

Cιι

Kopieren Sie das Ergebnis nach unten und rechts und erstellen Sie einen Tetromino.

T⊗ι⊗ι

Schneiden Sie die Leinwand auf eine LTriomino-Form.

‖OO→↓ι

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ß:

HFN«⟲C²⁶‖OOLX³ι

Probieren Sie es online! Link ist eine ausführliche Version des Codes.



4

PHP 7, 125 109 Bytes

Ein 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 Hoder 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 !


for($z=3**$argn;$z*$z>$q=$p;print$c."
"[++$p%$z])for($c=H;$q;$q-=$q/$z%3*$z,$q/=3)if($q%3==1&&$q/$z%3-1)$c=_;

druckt das Ergebnis aus. Als Rohr mit laufen lassen -nR.

qualifizierte Funktion, 147 130 Bytes

function r($n){for($z=3**$n;$z*$z>$q=$p;$r.=$c."
"[++$p%$z])for($c=H;$q;$q-=$q/$z%3*$z,$q/=3)if($q%3==1&&$q/$z%3-1)$c=_;return$r;}

Gibt eine einzelne Zeichenfolge zurück. Führen Sie die Standardkonfiguration aus (Nein php.ini).


1
%3==1kann durch ersetzt werden %3&1.
Primo

3

Gelee , 25 Bytes

,’b3U×"3S_4A1e
3*çþ`ị⁾ HY

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 (x,y)(1-Indexierung), das erste Glied zurückkehrt 0und 1entspricht Hund jeweils.


,                Pair. Get (x,y)
 ’               Decrement. Get (x,y) (0-indexing)
  b3             Convert to base 3 digits.
    U            Upend. So next operations can pair the corresponding digits.
     ×"3         Multiply the first element (list) by 3.
        S        Sum (corresponding digit together). Let the sum be s.
         _4A1e   Check if any of abs(s-4) is 1. Equivalently, check
                 if there is any 3 or 5 in the list of s.

Außerdem werden die 5 Bytes ị⁾ HYfür die Formatierung verwendet, sodass dieses Programm (20 Bytes) ebenfalls gültig ist (aber die Ausgabe sieht nicht so gut aus):

,’b3U×"3S_4A1e
3*çþ`

3

T-SQL , 267 261 Bytes

DECLARE @N INT=3DECLARE @ TABLE(I INT,H VARCHAR(MAX))INSERT @ VALUES(1,'H H'),(2,'HHH'),(3,'H H');WITH
T AS(SELECT 1 A,3 P,I J,H S FROM @ UNION ALL SELECT A+1,P*3,J*P+I,REPLACE(REPLACE(S,' ','   '),'H',H)FROM @,T
WHERE A<@N)SELECT S FROM T WHERE A=@N ORDER BY J

Dies ist meine erste Antwort auf Code Golf. Bitte helfen Sie mir, wenn ich Fehler gemacht habe. Außerdem ist meine bevorzugte Sprache Transact-SQL, was für Kurzcode nicht sehr gut geeignet ist.
Razvan Socol

1
Willkommen bei PPCG und schönen ersten Beitrag! Tipps zum Golfen in T-SQL finden Sie in diesem Beitrag!
Caird Coinheringaahing

Ich habe versucht, eine SQL-Geige hinzuzufügen, aber es funktioniert nicht gut mit Tabellenvariablen. Wenn ich normale Tabellen verwende, ist sie sogar 1 Byte kürzer: sqlfiddle.com/#!18/eb14e/2 . Die Ausgabe wird jedoch von sqlfiddle nicht korrekt formatiert, funktioniert jedoch in SSMS einwandfrei.
Razvan Socol

1
Sie sollten in der Lage sein, dies auf 259 zu
reduzieren,

Ich habe nur 261. Was fehle ich?
Razvan Socol

2

PHP 7, 153 Bytes

    function p($n){$r=["H H",HHH,"H H"];if(--$n)foreach(p($n)as$s){$r[+$i]=$r[$i+6*$p=3**$n]=str_pad($s,2*$p).$s;$r[3*$p+$i++]=$s.$s.$s;}ksort($r);return$r;}

Führen Sie die Standardkonfiguration aus (Nein php.ini) oder versuchen Sie es online .


2

Perl, 64 Bytes

//;$_ x=3,$.=s|.+|$&@{[$$_++/$.&1?$&:$"x$.]}$&|g for($_=H.$/)x$'

Benötigt -pwird die Eingabe von stdin übernommen. Die Ausgabe ist ein H von Hs.

Probieren Sie es online!


Das Zählen auf dieser Seite hat sich geändert, Sie müssen nicht -pmehr zählen (ich denke, es ist zu nachsichtig für Perl, aber so ist es jetzt)
Ton Hospel

2

PHP (5.6+), 94 Bytes

<?for(;$H>$e*=3or$e=($i+=$e&&print"$s
")<${$s=H}=3**$argn;)$s.=str_pad($i/$e%3&1?$s:'',$e).$s;

Wird mit der -FBefehlszeilenoption verwendet. Übernimmt die Standardeinstellungen des Interpreters ( -n). Funktioniert aufgrund des Netzbetreibers nicht mit Versionen vor 5.6.

Beispielnutzung

$ echo 3|php -nF h-carpet.php
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

Probieren Sie es online!


1
Sie können ein Byte speichern: $s.$s.$sstatt $s.=$s.$s. Und du brauchst nicht <?mit -Rstatt -F.
Titus

Danke für das Byte. Können -RSie mir die vollständige Verwendung zeigen?
Primo

Genau wie -nF: echo <input> | php -nR '<code>'. -rist fast das gleiche: php -nr '<code>' <arguments>.
Titus

Vielleicht bin ich einfach zu dumm, um es zum Laufen
primo

1
preg_filterbesteht darin, jede Zeile zu iterieren und dabei die Zeilenumbrüche beizubehalten, was ungefähr der Zeile entspricht join("\n",array_map(function(){...},split("\n",$s.$s.$s))), aber deutlich weniger ausführlich ist. Ich hatte zunächst str_padaber geändert, sprintfweil es ein Byte kürzer ist:'"\0".str_pad($$i++/$i&1?"\0":"",$i)."\0"'
Primo

1

CJam - 103 97 87 76 Bytes

{H{ae_,S*}%}:Il~a:A];{A_W={)(a9*+:A;[[HIH][HHH][HIH]]{z~}%}{);:A;"H"}?}:H~N*

Dieses 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



1

Japt , 23 Bytes

_·£[X³XX³]Ãy c ·û}gQq)y

Probieren Sie es online!

Ausgepackt und wie es funktioniert

Z{ZqR mXYZ{[Xp3 XXp3]} y c qR û}gQq)y

Z{    Declare a function that accepts a string...
  ZqR   Split by newline...
  mXYZ{   and map each row into...
    [Xp3 XXp3]  an array of [X.repeat(3), X, X.repeat(3)]
  }
  y   Transpose the resulting 2D array
  c   Flatten
  qR  Join with newline
  û   Center-pad each row to the longest
}
gQq)  Apply the above function to '"' recursively
y     Transpose the resulting 2D string

Verwenden des transponierten Musters

III
 I 
III

ist weitaus einfacher zu handhaben als das Originalmuster H, zumindest in Japt, wo das Imit String Repeat und Center-Padding gemacht werden kann.


0

C ++ 11 - 138 Bytes

Ich bin mir jedoch nicht sicher, ob diese Antwort hier eine gültige Syntax hat.

#define A a?1:0
template<int N>struct H{H<N-1>h[9];H(int a):h{A,0,A,A,A,A,A,0,A}{}};template<>struct H<0>{char h;H(int a):h{a?'H':' '}{}};

Ungolfed mit Arbeitscode

#include <iostream>

#define A a?1:0

template<int N>
struct H
{
  H<N-1> h[9];

  H(int a) : h{A,0,A,A,A,A,A,0,A}
  {}
};

template<>
struct H<0>
{
  char h;

  H(int a) : h{a?'H':' '}
  {}
};

int pow(int a, int b)
{
  int res=1;

  for (int i=1; i<=b; ++i)
    res *= a;

  return res;
}

template<int N>
char getHvalue(int i, int j, H<N> &hn)
{
  int n3=pow(3, N-1);

//std::cout << N << " " << i << " " << j << std::endl;

  return getHvalue(i%n3, j%n3, hn.h[i/n3*3+j/n3]);
}

template<>
char getHvalue<0>(int, int, H<0> &hn)
{
  return hn.h;
}

int main()
{
  H<0> h0(1);

  std::cout << getHvalue(0, 0, h0) << std::endl;

  std::cout << "\n====================\n" << std::endl;

  H<1> h1(1);

  for (int i=0; i<3; ++i) {
    for (int j=0; j<3; ++j)
      std::cout << getHvalue(i, j, h1);
    std::cout << std::endl;
  }

  std::cout << "\n====================\n" << std::endl;

  H<2> h2(1);

  for (int i=0; i<9; ++i) {
    for (int j=0; j<9; ++j)
      std::cout << getHvalue(i, j, h2);
    std::cout << std::endl;
  }

  std::cout << "\n====================\n" << std::endl;

  H<3> h3(1);

  for (int i=0; i<27; ++i) {
    for (int j=0; j<27; ++j)
      std::cout << getHvalue(i, j, h3);
    std::cout << std::endl;
  }

  return 0;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.