Crea una "H" da "H" più piccole


73

Sfida

Creare una funzione o un programma che, quando viene assegnato un numero intero size, procede come segue:

Se sizeè uguale a 1, output

H H
HHH
H H

Se sizeè maggiore di 1, output

X X
XXX
X X

dove Xè l'output del programma / funzione persize - 1

(Se preferisci, potresti avere il caso base corrispondente 0, purché specifichi nella tua risposta)

Uno dei seguenti formati di output è accettabile, a seconda di quale sia più conveniente per te:

  • Una stringa della struttura richiesta con due caratteri distinti corrispondenti a Hespace

  • Un array bidimensionale con la struttura richiesta, con due valori distinti corrispondenti a Hespace

  • Un array / elenco di stringhe, con una riga dell'output in ciascuna stringa, con due valori distinti corrispondenti a Hespace

Gli spazi iniziali sono consentiti, purché vi sia una quantità costante di spazi iniziali su ciascuna linea. I due caratteri di output distinti possono dipendere da qualsiasi cosa tu scelga, purché diversi.

Specifica quale formato di output restituisce il tuo codice.

Casi test

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

Questo è , quindi vince il conteggio di byte più basso per ogni lingua!

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
Perfetto per carbone probabilmente ... lol. Benvenuto anche in PPCG! : D
HyperNeutrino

10
Benvenuti in PPCG. Bella prima sfida!
Adám,

Possiamo usare taglie basate su 0?
Adám,


1
Lo chiamerei "Sierpinski H"
mbomb007,

Risposte:


28

Wolfram Language (Mathematica) , 46 byte

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

Restituisce un array 2d di 0s e 1s.

Provalo online!

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

Nest [ArrayFlatten @ {r = {#, 0, #}, {#, #, #}, r} &, 1, #] e [5] // Immagine


17
che diamine, ovviamente, Mathematica ha un built-in per array nidificati ricorsivi lol. +1
HyperNeutrino

1
@HyperNeutrino bene ovviamente
solo ASCII il

7
@HyperNeutrino Come viene considerato un built-in? Solo Nest(ripetutamente) la funzione più volte. Come qualsiasi altro argomento (Jelly?) Il ArrayFlattenè ... beh, integrato, ma si comporta in qualche modo proprio come Flatten[#,{{1,3},{2,4}}]in questo caso. (non testato)
user202729

6
C'è un built-in per questo, ma più a lungo. Mathematica ha nomi di funzioni lunghe.
alephalpha,

1
Come ha potuto, visto il trionfo della sfida upgoat ?
ojdo

21

Tela , 14 12 byte

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

Provalo qui!

Spiegazione:
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)                                                |

Dov'è Il'input, Xè il pattern generato dal loop precedente ("H" per il primo loop), ed <space>è lo spazio vuoto sulla prima e terza riga del pattern, aggiunto implicitamente da .

-2 byte grazie a dzaima !


Risposta incredibilmente breve: O
NL628

19

MATL , 12 11 byte

t:"[ACA]BX*

Dato input n, questo genera una matrice contenente 0e n.

Provalo online!

Per convertire questo in una matrice di caratteri di He spazio aggiungere g72*cnell'intestazione. Provalo anche online!

Oppure aggiungi ]1YCper vedere la matrice visualizzata graficamente. Provalo su MATL Online!

Spiegazione

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 byte

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

Esegui ed esegui il debug

Questa è la rappresentazione ASCII del programma con commenti. Questo programma costruisce la H lateralmente e poi traspone una volta alla fine.

'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

Programma bonus da 14 byte - usa il suo input come carattere di output. Teoricamente, questo non produrrebbe la forma giusta a 10, poiché ha 2 cifre, ma il tentativo di eseguire si blocca il mio browser.


11

Rubino , 72 byte

L'output è un elenco di stringhe, una stringa per riga.

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

Provalo online!


Molto bene! All'inizio l'output sembra tio su tio, ma va bene quando viene ingrandito.
Eric Duminil,



9

APL (Dyalog Classic) , 14 byte

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

Provalo online!

input valutato n

,⍳⎕⍴3 tutte le n-tuple con elementi da 0 1 2

2| mod 2

×/¨∘.≥⍨ forma una matrice confrontando ogni coppia di tuple a e b - se tutti gli elementi di a sono ≥ gli elementi corrispondenti di b, è un 1, altrimenti 0



8

R , 64 byte

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

Provalo online!

Riduce dal prodotto Kronecker, come un porto spudorato della risposta di Luis Mendo .

Il piè di pagina stampa bene il risultato, ma questa è una funzione anonima che restituisce un valore matrixdi 1for He 0per spazio.


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;}

Provalo online!

Restituisce un int[][]con 0per He 1per space. Questo in realtà "scolpisce" un muro di H"invece di" accatastare " H.

spiegazioni

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

salva 5 byte aggiungendo un'importazione statica per Math.pow
Selim

4
@Selezionare l'importazione statica nel conteggio dei byte. Quindi perderei ... 19 byte.
Olivier Grégoire,



6

J , 25 22 byte

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

Provalo 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 byte

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

Funziona solo con l'ultima versione di Prelude, perché esporta <>da Data.Semigroup. Per eseguirlo su TIO, aggiungi un'importazione come fatto qui: provalo online!

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

Modifica: -9 byte grazie a @ Potato44.


3
Si dovrebbe essere in grado di golf (#)giù a g#f=g<>f<>gse si utilizza GHC 8.4. Questo perché Semigroupè ora nel preludio.
Potato44

@ Potato44: sono abbastanza sicuro che questo aiuterà in molte sfide. Grazie!
nimi,

5

Perl 5 , 46 44 43 41 40 byte

1 conteggio basato. Usi 0e 1per He spazio, ha un vantaggio 1(spazio)

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

Basato su un'idea classica di mtve.

Provalo online!


1
L'output per n ≥ 3 non è del tutto corretto.
primo

@primo Il programma era corretto ma TIO utilizza la versione UTF-8 dei caratteri speciali. Ho corretto il collegamento per utilizzare invece le
escape

Non ho idea del perché \321sia necessario, qualsiasi personaggio sembra funzionare. //e $'può anche sostituire //ge $`, ma non sono sicuro che porti a un miglioramento.
primo

1
@primo Grazie! Stavo ancora lavorando dal codice derivato dalla vecchia soluzione mtve in cui \321era il complemento di bit .(utilizzato per generare un altro modello frattale). Ma ho lasciato cadere il complemento di bit, quindi ovviamente non ne ho più bisogno. Ho usato //ge $ `così posso facilmente testare il codice dalla riga di comando ( //e $'non portare a un guadagno che posso vedere, il byte guadagnato viene sprecato con uno spazio o di !nuovo)
Ton Hospel

5

Vim - 66 56 54 byte

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

L'input viene preso come numero nel buffer.


Cosa devo digitare, partendo da un prompt di bash, supponendo che abbia installato vim, per vedere il risultato?
Fabien,

Digitare vim, premere invio, digitare il numero di input (ad es. 3) nel buffer, quindi, dalla modalità normale, premere la sequenza di tasti dal post.
Chiel ten Brinke,

Assicurati di usare vanilla vim
Chiel ten Brinke

C'era un refuso nel codice. L'ho appena risolto.
Chiel ten Brinke,

1
Lavori! <kbd> I </kbd> è una i maiuscola, non ell. :set nowrapper vedere il risultato, per 4 e più.
Fabien

4

APL (Dyalog Unicode) , 38 34 byte SBCS

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

L'output è un array bidimensionale che 1rappresenta H e 0rappresenta lo spazio.

Provalo online!


2
Benvenuti in PPCG! È possibile omettere f←e contare i caratteri come 1 byte ciascuno: codegolf.meta.stackexchange.com/questions/9428/… È anche considerato legale prendere input , ovvero sostituire ⍣⍵con ⍣⎕e rilasciare le parentesi graffe del dfn esterno.
ngn,

Grazie! Non ho mai giocato a golf con APL prima d'ora, quindi questi dovrebbero aiutare.
MJacquet

1 1⍴1può essere scritto come ⍪1e quindi le parentesi attorno all'operatore diventano superflue. Se hai familiarità con i treni , qui possono aiutarti molto.
ngn,

Inoltre, è tuo amico: (⍵,(0×⍵),⍵)=>(⍵,⍵,⍨0×⍵)
Zacharý

4

Carbone , 30 29 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

H

Stampa l'originale H.

FENX³ι«

Passa sopra i primi sizepoteri di 3.

J⁰¦⁰

Riporta il cursore sull'origine. Trimserve questo, poiché sia ​​la stampa originale del Hche il riflesso in basso spostano il cursore.

C⁰ι

Copia la precedente iterazione verso il basso, creando un domino.

Cιι

Copia il risultato verso il basso e verso destra, creando un tetromino.

T⊗ι⊗ι

Taglia la tela fino a Lformare un triomino.

‖OO→↓ι

Rifletti la tela in orizzontale e in verticale con sovrapposizioni, completando l'iterazione.

Il carbone è meglio in alcuni frattali di altri. Ecco un'idea simile, ma in quasi la metà delle dimensioni:

HFN«⟲C²⁶‖OOLX³ι

Provalo online! Il collegamento è alla versione dettagliata del codice.



4

PHP 7, 125 109 byte

un approccio diverso: invece di annidare e appiattire il risultato in modo ricorsivo, questo scorre semplicemente attraverso le righe e le colonne e utilizza un terzo ciclo per scoprire se stampare Ho _.

Modifica: salvato molto combinando i loop di riga / colonna in uno, anche se ci è voluto un po 'per ottenere la riduzione corretta per il loop interno. Richiede PHP 7 per l'operatore elettrico.

Provali online !


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=_;

stampa il risultato. Esegui come pipe con -nR.

funzione qualificata, 147 130 byte

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;}

restituisce una singola stringa. Esegui con la configurazione predefinita (no php.ini).


1
%3==1può essere sostituito con %3&1.
primo

3

Gelatina , 25 byte

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

Provalo online!


Anche se questo è più lungo dell'invio di Jelly esistente , cerca di generare ogni personaggio indipendentemente dalle coordinate.

In particolare, se la coordinata è (x,y)(1-indicizzazione), il primo collegamento ritorna 0e 1corrisponde He rispettivamente a e .


,                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.

Inoltre, i 5 byte ị⁾ HYvengono utilizzati per la formattazione, quindi anche questo programma (20 byte) è valido (ma l'output non sembra carino):

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

3

T-SQL , 267 261 byte

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

Questa è la mia prima risposta su Code Golf, quindi per favore aiutatemi se ho fatto degli errori. Inoltre, la mia lingua preferita è Transact-SQL, che non è molto adatto per il codice funzione.
Razvan Socol,

1
Benvenuti in PPCG e bel primo post! Per suggerimenti sul golf in T-SQL, assicurati di dare un'occhiata a questo post!
caird coinheringaahing

Ho provato ad aggiungere un sqlfiddle, ma non funziona bene con le variabili di tabella. Se uso tabelle normali, è anche più corto di 1 byte: sqlfiddle.com/#!18/eb14e/2 . Tuttavia, l'output non è formattato correttamente da sqlfiddle, ma funziona bene in SSMS.
Razvan Socol,

1
Dovresti riuscire a
portarlo

Ho solo 261. Cosa mi sto perdendo?
Razvan Socol,

2

PHP 7, 153 byte

    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;}

Esegui con la configurazione predefinita (no php.ini) o provalo online .


2

Perl, 64 byte

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

Richiede -p, l'input è preso dallo stdin. L'output è una H di Hs.

Provalo online!


Il conteggio su questo sito è cambiato, non devi -ppiù contare (penso che sia troppo indulgente per il perl, ma è così che è adesso)
Ton Hospel

2

PHP (5.6+), 94 byte

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

Utilizzato con l' -Fopzione della riga di comando. Presuppone i valori predefiniti dell'interprete ( -n). Non funzionerà su versioni precedenti alla 5.6, a causa dell'operatore di potenza.

Utilizzo del campione

$ 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

Provalo online!


1
È possibile salvare un byte: $s.$s.$sanziché $s.=$s.$s. E non è necessario <?con -Rinvece di -F.
Tito

Grazie per il byte. Per quanto riguarda -R, puoi mostrarmi l'uso completo?
primo

Proprio come -nF: echo <input> | php -nR '<code>'. -rè quasi la stessa: php -nr '<code>' <arguments>.
Tito

Forse sono troppo stupido per farlo funzionare: / i.stack.imgur.com/jqpmk.png
primo

1
preg_filterè iterare ogni riga preservando le nuove righe, approssimativamente equivalenti a join("\n",array_map(function(){...},split("\n",$s.$s.$s))), ma significativamente meno dettagliate. Inizialmente avevo str_padcambiato ma sprintfè più corto di un byte:'"\0".str_pad($$i++/$i&1?"\0":"",$i)."\0"'
primo

1

CJam - 103 97 87 76 byte

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

Questo programma esegue una ricorsione "codificata a mano" piuttosto dettagliata. Nessuna moltiplicazione della matrice intelligente. Durante la ricorsione, in cima allo stack c'è un array che raccoglie l'output ottenuto dalle chiamate principali. Subito dopo ogni serie di chiamate ricorsive l'output delle chiamate ricorsive deve essere compresso insieme, per assicurarsi che l'output sia corretto quando lo stack viene stampato in modo lineare alla fine del programma. Lo stack di argomenti trasmessi durante la ricorsione viene mantenuto nella variabile A.

Prova online



1

Japt , 23 byte

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

Provalo online!

Disimballato e come funziona

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

Usando il modello trasposto

III
 I 
III

è molto più facile da gestire rispetto al Hmodello originale , almeno in Japt dove Ipuò essere fatto con la ripetizione delle corde e l'imbottitura centrale.


0

C ++ 11 - 138 byte

Tuttavia, non sono sicuro che questa risposta abbia una sintassi valida qui.

#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':' '}{}};

Non registrato con codice funzionante

#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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.