Utwórz „H” z mniejszych „H”


73

Wyzwanie

Utwórz funkcję lub program, który po otrzymaniu liczby całkowitej sizewykonuje następujące czynności:

Jeśli sizejest równe 1, wyjście

H H
HHH
H H

Jeśli sizejest większy niż 1, wyjście

X X
XXX
X X

gdzie Xjest wyjściem programu / funkcji dlasize - 1

(Jeśli wolisz, możesz dopasować przypadek podstawowy 0, o ile podasz w odpowiedzi)

Dowolny z poniższych formatów wyjściowych jest akceptowalny, w zależności od tego, który jest dla Ciebie wygodniejszy:

  • Ciąg wymaganej struktury z dowolnymi dwoma odrębnymi znakami odpowiadającymi Hispace

  • Dwuwymiarowa tablica o wymaganej strukturze, z dowolnymi dwoma odrębnymi wartościami odpowiadającymi Hispace

  • Tablica / lista ciągów, z jednym wierszem wyniku w każdym ciągu, z dowolnymi dwoma odrębnymi wartościami odpowiadającymi Hispace

Dopuszczalne spacje są dozwolone, o ile na każdej linii znajduje się stała ilość spacji wiodących. Dwa różne znaki wyjściowe mogą być zależne od wszystkiego, co wybierzesz, o ile są one różne.

Określ format wyjściowy, który zwraca kod.

Przypadki testowe

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

To jest , więc wygrywa najniższa liczba bajtów dla każdego języka!

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
Idealny na węgiel drzewny prawdopodobnie ... lol. Witamy również w PPCG! : D
HyperNeutrino

10
Witamy w PPCG. Ładne pierwsze wyzwanie!
Adám

Czy możemy użyć rozmiarów 0?
Adám


1
Nazwałbym to „Sierpińskim H”
mbomb007

Odpowiedzi:


28

Wolfram Language (Mathematica) , 46 bajtów

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

Zwraca tablicę 2d 0s i 1s.

Wypróbuj online!

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

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


17
co do cholery Mathematica ma wbudowane w rekurencyjne zagnieżdżone tablice lol. +1
HyperNeutrino

1
@HyperNeutrino no oczywiście
tylko ASCII

7
@HyperNeutrino Jak to jest uważane za wbudowane? Wystarczy Nest(wielokrotnie) tę funkcję wiele razy. Jak każde inne zgłoszenie (Galaretka?) ArrayFlattenJest… cóż, wbudowane, ale zachowuje się trochę tak jak Flatten[#,{{1,3},{2,4}}]w tym przypadku. (nie testowałem)
user202729,

6
Jest do tego wbudowany, ale dłużej. Mathematica ma długie nazwy funkcji.
alephalpha

1
Jak nie mógł, skoro triumfował w wyzwaniu optymistycznym ?
ojdo

21

Płótno , 14 12 bajtów

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

Wypróbuj tutaj!

Wyjaśnienie:
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)                                                |

Gdzie Ijest wejście, Xjest wzorcem wygenerowanym przez poprzednią pętlę („H” dla pierwszej pętli) i <space>jest pustą przestrzenią w pierwszym i trzecim rzędzie wzorca, dodaną domyślnie przez .

-2 bajty dzięki dzaima !


Zadziwiająco krótka odpowiedź: O
NL628,

19

MATL , 12 11 bajtów

t:"[ACA]BX*

Biorąc pod uwagę dane wejściowe n, tworzy to macierz zawierającą 0i n.

Wypróbuj online!

Aby przekonwertować to na macierz znaków Hi spację, dodaj g72*cnagłówek. Wypróbuj też online!

Lub dodaj, ]1YCaby zobaczyć matrycę wyświetlaną graficznie. Wypróbuj w MATL Online!

Wyjaśnienie

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 bajtów

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

Uruchom i debuguj

Jest to ascii reprezentacja programu z komentarzami. Ten program buduje literę H na boki, a następnie transponuje raz na końcu.

'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

Dodatkowy 14-bajtowy program - wykorzystuje jego dane wejściowe jako znak wyjściowy. Teoretycznie nie dałoby to prawidłowego kształtu przy 10, ponieważ ma 2 cyfry, ale próba uruchomienia powoduje awarię mojej przeglądarki.





9

APL (Dyalog Classic) , 14 bajtów

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

Wypróbuj online!

oceniane wejście n

,⍳⎕⍴3 wszystkie n-krotki z elementami od 0 1 2

2| mod 2

×/¨∘.≥⍨ utwórz macierz, porównując każdą parę krotek a i b - jeśli wszystkie elementy a są ≥ odpowiadającymi elementami b, jest to 1, w przeciwnym razie 0



8

R , 64 bajty

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

Wypróbuj online!

Redukuje produkt Kronecker, jako bezwstydny port odpowiedzi Luisa Mendo .

Stopka drukuje wynik ładnie, ale jest to anonimowa funkcja, która zwraca matrixz 1za Hi 0dla przestrzeni.


8

Java (OpenJDK 9) , 135 bajtów

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

Wypróbuj online!

Zwraca int[][]z 0za Hi 1za space. To faktycznie „rzeźbi” ścianę Hzamiast „palowania” H.

Objaśnienia

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

zaoszczędź 5 bajtów, dodając statyczny import dla Math.pow
Selim

4
@ Ogranicz liczbę importów statycznych w liczbie bajtów. Więc straciłbym ... 19 bajtów.
Olivier Grégoire,



6

J , 25 22 bajtów

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

Wypróbuj 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 bajtów

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

Działa to tylko z najnowszą wersją Prelude, ponieważ eksportuje <>z Data.Semigroup. Aby uruchomić go na TIO, dodaj import, tak jak tutaj: Wypróbuj 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

Edycja: -9 bajtów dzięki @ Potato44.


3
Powinieneś być w stanie grać (#)w golfa , g#f=g<>f<>gjeśli używasz GHC 8.4. To dlatego, że Semigroupjest teraz w preludium.
Potato44

@ Potato44: Jestem pewien, że pomoże to w wielu wyzwaniach. Dzięki!
nimi

5

Perl 5 , 46 44 43 41 40 bajtów

1 liczenie. Wykorzystuje 0i 1dla Hi przestrzeń, ma wiodącą 1(przestrzeń)

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

Oparty na klasycznym pomyśle mtve.

Wypróbuj online!


1
Wyjście dla n ≥ 3 nie jest całkiem poprawne.
primo

@primo Program był poprawny, ale TIO używa wersji znaków specjalnych UTF-8. Naprawiłem link do używania zamiast tego znaków ucieczki, ale program nadal działa, jeśli używasz rzeczywistych literalnych znaków
Ton Hospel

Nie mam pojęcia, dlaczego \321jest to konieczne, każda postać wydaje się działać. //i $'może również zastąpić //gi $`, ale nie jestem pewien, czy prowadzi to do poprawy.
primo

1
@primo Dzięki! Nadal pracowałem na podstawie kodu pochodzącego ze starego rozwiązania mtve, w którym \321znajdowało się uzupełnienie bitowe .(używane do generowania kolejnego wzorca fraktalnego). Ale porzuciłem bit-dopełniacz, więc oczywiście już go nie potrzebuję. Użyłem //gi $ `, dzięki czemu mogę łatwo przetestować kod z wiersza poleceń ( //i $'nie prowadzę do wzmocnienia, które widzę, uzyskany bajt jest marnowany spacją lub !ponownie)
Ton Hospel

5

Vim - 66 56 54 bajtów

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

Dane wejściowe są traktowane jako liczba w buforze.


Co muszę wpisać, zaczynając od monitu bash, zakładając, że mam zainstalowany vim, aby zobaczyć wynik?
Fabien

Wpisz vim, naciśnij enter, wpisz numer bufora (np. 3), a następnie, w trybie normalnym, naciśnij sekwencję klawiszy z postu.
Chiel ten Brinke

Upewnij się, że używasz waniliowego vima
Chiel ten Brinke

W kodzie była literówka. Właśnie to naprawiłem.
Chiel ten Brinke

1
Pracuje! <kbd> I </kbd> to stolica i nie ell. :set nowrapaby zobaczyć wynik, dla 4 i więcej.
Fabien

4

APL (Dyalog Unicode) , 38 34 bajtów SBCS

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

Dane wyjściowe to tablica dwuwymiarowa z 1 reprezentacją H i 0przestrzenią.

Wypróbuj online!


2
Witamy w PPCG! Można pominąć f←i znaki liczyć jako 1 bajt każdego: codegolf.meta.stackexchange.com/questions/9428/... Jest również uznane za legalne wziąć sygnał z , czyli zastąpić ⍣⍵z ⍣⎕i upuść szelki zewnętrznej DFN jest.
ngn

Dzięki! Nigdy wcześniej nie grałem oficjalnie w golfa APL, więc to powinno pomóc.
MJacquet,

1 1⍴1można zapisać jako, ⍪1a wtedy pareny wokół operatora stają się niepotrzebne. Jeśli znasz pociągi - tutaj mogą bardzo pomóc.
ngn

Ponadto, jest twoim przyjacielem: (⍵,(0×⍵),⍵)=>(⍵,⍵,⍨0×⍵)
Zacharý

4

Węgiel drzewny , 30 29 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

H

Wydrukuj oryginał H.

FENX³ι«

Pętla nad pierwszymi sizepotęgami 3.

J⁰¦⁰

Przesuń kursor z powrotem do początku. Trimpotrzebuje tego, ponieważ zarówno oryginalny wydruk, jak Hi odbicie poniżej poruszają kursorem.

C⁰ι

Skopiuj poprzednią iterację w dół, tworząc domino.

Cιι

Skopiuj wynik w dół i w prawo, tworząc tetromino.

T⊗ι⊗ι

Przytnij płótno do Lkształtu triomino.

‖OO→↓ι

Odbij płótno poziomo i pionowo z zakładką, wykonując iterację.

Węgiel drzewny jest lepszy w niektórych fraktalach niż w innych. Oto podobny pomysł, ale w prawie połowie wielkości:

HFN«⟲C²⁶‖OOLX³ι

Wypróbuj online! Link jest do pełnej wersji kodu.



4

PHP 7, 125 109 bajtów

inne podejście: Zamiast rekurencyjnie zagnieżdżać i spłaszczać wynik, po prostu pętle przechodzą przez wiersze i kolumny i wykorzystują trzecią pętlę, aby dowiedzieć się, czy wydrukować, Hczy _.

Edycja: Dużo zaoszczędziłem, łącząc pętle wierszy / kolumn w jedną, choć zajęło trochę czasu, aby uzyskać prawidłowe zmniejszenie wewnętrznej pętli. Wymaga PHP 7 dla operatora mocy.

Wypróbuj je 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=_;

wypisuje wynik. Uruchom jako potok z -nR.

funkcja kwalifikowana, 147 130 bajtów

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

zwraca pojedynczy ciąg. Uruchom z domyślną konfiguracją (nie php.ini).


1
%3==1można zastąpić %3&1.
primo

3

Galaretka , 25 bajtów

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

Wypróbuj online!


Chociaż jest to dłuższe niż dotychczasowe zgłoszenie galaretki , próbuje wygenerować każdą postać niezależnie tylko od współrzędnej.

W szczególności, jeżeli jest współrzędna (x,y)(1 indeksowania), pierwszy powraca łącza 0i 1odpowiada Hi , odpowiednio.


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

Ponadto 5 bajtów ị⁾ HYsłuży do formatowania, więc ten program (20 bajtów) jest również poprawny (ale dane wyjściowe nie wyglądają tak ładnie):

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

3

T-SQL , 267 261 bajtów

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

To moja pierwsza odpowiedź na Code Golf, więc pomóżcie mi, jeśli popełniłem jakieś błędy. Ponadto moim preferowanym językiem jest Transact-SQL, który nie jest odpowiedni dla krótkiego kodu.
Razvan Socol

1
Witamy w PPCG i fajny pierwszy post! Aby uzyskać wskazówki dotyczące gry w golfa w T-SQL, sprawdź ten post!
caird coinheringaahing

Próbowałem dodać sqlfiddle, ale nie działa dobrze ze zmiennymi tabeli. Jeśli używam normalnych tabel, jest nawet 1 bajt krótszy: sqlfiddle.com/#!18/eb14e/2 . Jednak wynik nie jest poprawnie sformatowany przez sqlfiddle, ale działa dobrze w SSMS.
Razvan Socol

1
Powinieneś być w stanie sprowadzić to do 259, usuwając niepotrzebne białe znaki i
linie

Mam tylko 261. Czego mi brakuje?
Razvan Socol

2

PHP 7, 153 bajty

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

Uruchom z domyślną konfiguracją (nie php.ini) lub spróbuj online .


2

Perl, 64 bajty

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

Wymaga -p, dane wejściowe są pobierane ze standardowego wejścia. Dane wyjściowe to H Hs.

Wypróbuj online!


Liczenie na tej stronie się zmieniło, nie musisz -pjuż liczyć (myślę, że jest to zbyt łagodne dla Perla, ale tak już jest)
Ton Hospel

2

PHP (5.6+), 94 bajty

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

Używany z -Fopcją wiersza poleceń. Zakłada domyślne wartości interpretera ( -n). Nie działa w wersjach wcześniejszych niż 5.6, ze względu na operatora mocy.

Przykładowe użycie

$ 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

Wypróbuj online!


1
Możesz zapisać jeden bajt: $s.$s.$szamiast $s.=$s.$s. I nie potrzebujesz <?z -Rzamiast -F.
Tytus

Dzięki za bajt. Jeśli chodzi o to -R, czy możesz mi pokazać pełne wykorzystanie?
primo

Podobnie jak -nF: echo <input> | php -nR '<code>'. -rjest prawie taka sama: php -nr '<code>' <arguments>.
Tytus

Może jestem po prostu zbyt głupi, żeby to działało: / i.stack.imgur.com/jqpmk.png
primo

1
preg_filterpolega na iteracji każdej linii z zachowaniem nowej linii, mniej więcej równoważnej join("\n",array_map(function(){...},split("\n",$s.$s.$s))), ale znacznie mniej szczegółowej. Początkowo str_padzmieniłem na, sprintfponieważ jest o jeden bajt krótszy:'"\0".str_pad($$i++/$i&1?"\0":"",$i)."\0"'
primo

1

CJam - 103 97 87 76 bajtów

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

Ten program wykonuje dość pełną rekursję „ręcznie”. Brak inteligentnego mnożenia macierzy. W trakcie rekurencji na szczycie stosu znajduje się tablica gromadząca dane wyjściowe uzyskane z wywołań nadrzędnych. Zaraz po każdym zestawie wywołań rekurencyjnych dane wyjściowe wywołań rekurencyjnych muszą zostać spakowane razem, aby upewnić się, że dane wyjściowe są prawidłowe, gdy stos jest drukowany liniowo na końcu programu. Stos argumentów przekazywanych w rekursji jest przechowywany w zmiennej A.

Wypróbuj online



1

Japt , 23 bajty

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

Wypróbuj online!

Rozpakowane i jak to działa

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

Korzystanie z transponowanego wzoru

III
 I 
III

jest znacznie łatwiejszy w obsłudze niż oryginalny Hwzór, przynajmniej w Japt, gdzie Imożna to zrobić za pomocą powtórzenia struny i środkowego wypełnienia.


0

C ++ 11–138 bajtów

Nie jestem jednak pewien, czy ta odpowiedź ma poprawną składnię tutaj.

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

Niegolfowany z działającym kodem

#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;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.