Küçük “H” lerden bir “H” oluşturun.


73

Meydan okuma

Bir tamsayı verildiğinde sizeaşağıdakileri yapan bir işlev veya program oluşturun :

Eğer size1 'e eşit olduğu, çıkış

H H
HHH
H H

Eğer size1, çıktı daha büyüktür

X X
XXX
X X

Xprogramın / fonksiyonun çıktısı neredesize - 1

(İsterseniz 0, cevabınızı belirttiğiniz sürece , temel davaya karşılık gelebilir )

Aşağıdaki çıktı biçimlerinden herhangi biri kabul edilebilir; hangisi sizin için daha uygunsa:

  • İstenen yapının bir dize ve karşılık gelen herhangi iki farklı karakter Hilespace

  • İstenen yapıya sahip iki boyutlu bir dizi, Hvespace

  • Herhangi iki farklı değerlerine karşılık gelen her bir dize çıktının bir satır ile bir dizi / şeritlerinin listesi, Hvespace

Her satırda sabit miktarda öncü alan olduğu sürece, öncü alanlara izin verilir. İki farklı çıktı karakteri, farklı oldukları sürece seçtiğiniz herhangi bir şeye bağlı olabilir.

Kodunuzun döndürdüğü çıktı biçimini belirtin.

Test Kılıfları

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

Bu , yani her dil için en düşük bayt sayısı kazanıyor!

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
Kömür muhtemelen mükemmel ... lol. Ayrıca PPCG'ye hoş geldiniz! : D
HyperNeutrino,

10
PPCG'ye Hoşgeldiniz. Güzel ilk meydan okuma!
Adám

0 tabanlı beden kullanabilir miyiz?
Adám


1
Buna "Sierpinski H"
diyordum

Yanıtlar:


28

Wolfram Dili (Mathematica) , 46 bayt

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

2d dizisini 0s ve 1s döndürür .

Çevrimiçi deneyin!

Yuva [ArrayFlatten @ {r = {# 0, #}, {#, #, #}, R}, 1, #] [3] // MatrixForm

Yuva [ArrayFlatten @ {r = {# 0, #}, {#, #, #}, R}, 1, #] [5] // Resim


17
Elbette ne halt Mathematica özyinelemeli iç içe diziler lol için yerleşik bir vardır. +1
HyperNeutrino

1
@HyperNeutrino açıkça
ASCII-sadece

7
@HyperNeutrino Bu nasıl bir yerleşik olarak kabul edilir? Sadece Nest(tekrar tekrar) işlev birden çok kez. Diğer gönderiler gibi (Jelly?) Bu ArrayFlatten... iyi, yerleşik, ancak Flatten[#,{{1,3},{2,4}}]bu durumda olduğu gibi bir şekilde davranır . (test etmedi)
user202729 9:18

6
Bunun için bir yerleşik var, ancak daha uzun. Mathematica'nın uzun fonksiyon isimleri vardır.
alephalpha

1
Upgoat mücadelesinde zaferi göz önüne alındığında nasıl olmaz ?
15'te ojdo

21

Tuval , 14 12 bayt

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

Burada dene!

Açıklama:
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)                                                |

IGirdi nerede , Xönceki döngü (ilk döngü için "H") tarafından oluşturulan modeldir ve modelin <space>birinci ve üçüncü satırındaki boş alandır, dolaylı olarak eklenir .

Dzaima sayesinde -2 bayt !


Şaşırtıcı şekilde kısa cevap: O
NL628

19

MATL , 12 11 bayt

t:"[ACA]BX*

Verilen giriş n, bu 0ve içeren bir matris çıkarır n.

Çevrimiçi deneyin!

Bunu karakter matrisine dönüştürmek için ve başlıkta Hboşluk ekleyin g72*c. Online olarak da deneyin!

Veya ]1YCgrafik olarak gösterilen matrisi görmek için ekleyin . MATL Online'da deneyin !

açıklama

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 bayt

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

Koş ve hata ayıkla

Bu, programın yorumlu ascii temsilidir. Bu program H'yi yana doğru oluşturur ve daha sonra bir kez çevrilir.

'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 programı - girişini çıkış karakteri olarak kullanır. Teorik olarak, bu 10 basamakta doğru şekli üretmez, çünkü 2 rakamı vardır, ancak tarayıcıyı çökertecek şekilde çalışmayı dener.


11

Ruby , 72 bayt

Çıktı, dizgelerin bir listesidir, her satıra bir dizedir.

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

Çevrimiçi deneyin!


Aferin! İlk önce tio'da çıktı yanlış görünüyor, ancak uzaklaştırıldığında sorun yok.
Eric Duminil



9

APL (Dyalog Klasik) , 14 bayt

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

Çevrimiçi deneyin!

değerlendirilen girdi n

,⍳⎕⍴3 0 1 2 'den elemanlara sahip tüm n-tupler

2| mod 2

×/¨∘.≥⍨ Her çift a ve b çiftlerini karşılaştırarak bir matris oluşturmak




8

Java (OpenJDK 9) , 135 bayt

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

Çevrimiçi deneyin!

Bir döndürür int[][]ile 0için Hve 1için space. Bu aslında “ Hkazık” yerine bir duvarı “oyuyor” H.

açıklamalar

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

Math.pow için statik bir ithalat ekleyerek 5 bayt kazanın
Selim

4
@Selim statik byte sayısında statik ithalat gereklidir. Böylece kaybederim ... 19 bayt.
Olivier Grégoire



6

J , 25 22 bayt

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

Çevrimiçi deneyin!

        */               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 bayt

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

Bu yalnızca son sürümü ile çalışır Preludebu ihraç, çünkü <>gelen Data.Semigroup. TIO'da çalıştırmak için, burada olduğu gibi bir içe aktarma ekleyin: Çevrimiçi deneyin!

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

Düzenleme: @ Potato44 sayesinde -9 bayt.


3
Sen golf gerekir (#)aşağı g#f=g<>f<>gsen GHC 8.4 kullanıyorsanız. Bunun nedeni Semigroupşuanda başlangıç ​​aşamasında.
Patates44

@ Patates44: Bunun bir çok zorluğa yardımcı olacağından eminim. Teşekkürler!
nimi

5

Perl 5 , 46 44 43 41 40 bayt

1 tabanlı sayma. Kullanımları 0ve 1için Hve uzay, lider vardır 1(boşluk)

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

Mtve'nin klasik bir fikrine dayanır.

Çevrimiçi deneyin!


1
N ≥ 3 için çıktı pek doğru değil.
primo

@primo Program doğru ancak TIO özel karakterlerin UTF-8 versiyonunu kullanıyor. Bunun yerine kaçış kullanmak için bağlantıyı düzelttim, ancak gerçek hazır karakterleri kullanıyorsanız program hala çalışıyor
Ton Hospel

Neden \321gerekli olduğu hakkında hiçbir fikrim yok , herhangi bir karakter çalışıyor gibi görünüyor. //ve $'aynı zamanda yerini alabilir //gve $`iyileşmeye yol açacağından emin değilim.
primo

1
@primo Teşekkürler! Ben hala ( \321tamamlayıcı .bir fraktal desen oluşturmak için kullanılan) bit tamamlayıcısı olan eski mtve çözümünden türetilen koddan çalışıyordum . Ama bit-tamamlayıcıyı düşürdüm tabii ki artık buna ihtiyacım yok. Ben kullandım //gve $ `ı kodun komut //$'!
satırından

5

Vim - 66 56 54 bayt

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

Giriş, tamponda bir sayı olarak alınır.


Sonucu görmek için vim yüklediğimi varsayarak, bir bash komut isteminden başlayarak ne yazmalıyım?
Fabien

Vim yazın, enter tuşuna basın, giriş numarasını (örn. 3) tampon belleğe yazın, ardından normal moddan postadaki tuş sırasına basın.
Chiel ten Brinke

Vanilya vim
Chiel ten Brinke

Kodda bir yazım hatası vardı. Sadece tamir ettim.
Chiel ten Brinke

1
Eserleri! <kbd> Ben </kbd> ell değil, ben bir sermayedir. :set nowrapsonucu görmek için, 4 ve daha fazlası için.
Fabien

4

APL (Dyalog Unicode) , 38 34 bayt SBCS

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

Çıktı, 1H'yi 0temsil eden ve boşluğu temsil eden 2 boyutlu bir dizidir .

Çevrimiçi deneyin!


2
PPCG'ye Hoşgeldiniz! Karakterleri,f← her biri 1 baytlık olarak atlayabilir ve sayabilirsiniz: codegolf.meta.stackexchange.com/questions/9428/… Ayrıca girdi almak , örneğin dış dfn ayraçları ⍣⍵ile değiştirmek ⍣⎕ve bunları bırakmak için yasal sayılır .
ngn

Teşekkürler! Daha önce hiçbir zaman resmi olarak APL ile golf oynadım, bu yüzden bunlar yardımcı olacak.
MJacquet

1 1⍴1olarak yazılabilir ⍪1ve ardından operatörün etrafındaki parenler gereksiz hale gelir. Trenlere aşina iseniz - burada çok yardımcı olabilirler.
ngn

Ayrıca, senin arkadaşın: (⍵,(0×⍵),⍵)=>(⍵,⍵,⍨0×⍵)
Zacharý

4

Kömür , 30 29 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

H

Orijinali yazdırın H.

FENX³ι«

size3'ün ilk güçleri üzerinde döngü .

J⁰¦⁰

İmleci orijine geri götürün. Trimİhtiyaç duyduğunuzda, hem orijinalinin baskısı hem de Haşağıdaki yansıma imleci hareket ettirir.

C⁰ι

Bir domino oluşturarak önceki yinelemeyi aşağı doğru kopyalayın.

Cιι

Bir tetromino oluşturarak sonucu aşağı ve sağa kopyalayın.

T⊗ι⊗ι

Tuvali bir Ltriomino şekline indirin.

‖OO→↓ι

Tuvali yatay ve dikey olarak üst üste bindirerek yinelemeyi tamamlayın.

Kömür bazı fraktallarda diğerlerinden daha iyidir. İşte benzer bir fikir, ancak neredeyse yarısı boyutunda:

HFN«⟲C²⁶‖OOLX³ι

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur.



4

PHP 7, 125 109 bayt

Farklı bir yaklaşım: Yerine yuvalama ve yinelemeli sonucu düzleştirme, bu sadece satırlar ve sütunlar aracılığıyla döngüsü ve baskıya olmadığını öğrenmek için bir 3. döngü kullanır Hya _.

Düzenleme: Satır / sütun döngülerini birleştirerek çok fazla tasarruf sağladı, ancak iç döngüdeki düşüşün doğru olması biraz zaman aldı. Güç operatörü için PHP 7 gerektirir.

Onları çevrimiçi deneyin !


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

sonucu yazdırır. İle boru olarak çalıştırın -nR.

nitelikli işlev, 147 130 bayt

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

tek bir dize döndürür. Varsayılan config (no php.ini) ile çalıştırın .


1
%3==1ile değiştirilebilir %3&1.
primo

3

Jöle , 25 bayt

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

Çevrimiçi deneyin!


Bu, mevcut Jelly sunumundan daha uzun olmasına rağmen , her karakteri bağımsız olarak sadece koordinattan üretmeye çalışır.

Özellikle, koordinatı olduğu (x,y)(1 indeksleme), birinci bağlantı döner 0ve 1karşılık gelen Hve sırasıyla.


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

Ayrıca, ị⁾ HYbiçimlendirme için 5 bayt kullanılır, bu nedenle bu program (20 bayt) da geçerlidir (ancak çıktı hiç hoş görünmüyor):

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

3

T-SQL , 267 261 bayt

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

Bu Code Golf hakkındaki ilk cevabım, bu yüzden herhangi bir hata yaptıysam lütfen bana yardım et. Ayrıca, tercih ettiğim dil, kısa kod için pek uygun olmayan Transact-SQL.
Razvan Socol

1
PPCG'ye hoş geldiniz ve ilk mesajınız hoş! T-SQL'de golf oynama hakkında ipuçları için, bu gönderiyi kontrol ettiğinizden emin olun !
caird coinheringaahing 11:18

Bir sqlfiddle eklemeyi denedim, ancak tablo değişkenleriyle iyi çalışmıyor. Normal tablolar kullanırsam, 1 bayt daha kısadır: sqlfiddle.com/#!18/eb14e/2 . Ancak, çıktı sqlfiddle tarafından doğru şekilde biçimlendirilmedi, ancak SSMS'de düzgün çalışıyor.
Razvan Socol

1
Gereksiz boşluk ve satır boşluklarını kaldırarak
bunu 259'a kadar alabilmelisiniz

Sadece 261'e ulaştım. Neyi özlüyorum?
Razvan Socol

2

PHP 7, 153 bayt

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

Varsayılan config (no php.ini) ile çalıştırın veya çevrimiçi deneyin .


2

Perl, 64 bayt

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

Gerektirir -p, girdiler stdin'den alınır. Çıktı s, H'dir H.

Çevrimiçi deneyin!


Bu sitedeki sayım değişti, -partık saymanıza gerek yok (perl için çok yumuşak olduğunu düşünüyorum, ama şimdi böyle.)
Ton Hospel

2

PHP (5.6+), 94 bayt

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

İle Kullanılan -Fkomut satırı seçeneği. Tercüman varsayılanlarını ( -n) kabul eder. Güç operatörü nedeniyle 5.6'dan önceki sürümlerde çalışmaz.

Örnek kullanım

$ 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

Çevrimiçi deneyin!


1
Bir bayt kaydedebilirsiniz: $s.$s.$syerine $s.=$s.$s. Ve ihtiyacım yok <?ile -Ryerine -F.
Titus

Bayt için teşekkürler. İlgili -R, bana tam kullanımını gösterebilir?
primo

Tıpkı -nF: echo <input> | php -nR '<code>'. -rNeredeyse aynıdır php -nr '<code>' <arguments>.
Titus

Belki de çalışamayacak kadar aptalım: / i.stack.imgur.com/jqpmk.png
primo

1
preg_filterYeni satırları korurken, kabaca eşdeğer join("\n",array_map(function(){...},split("\n",$s.$s.$s))), ancak önemli ölçüde daha az ayrıntılı olan her satırı yinelemektir . Başlangıçta, str_padancak değişti sprintfçünkü bir bayt daha kısa:'"\0".str_pad($$i++/$i&1?"\0":"",$i)."\0"'
primo

1

CJam - 103 97 87 76 bayt

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

Bu program oldukça ayrıntılı bir "handcoded" özyinelemesini yapıyor. Akıllı matris çarpımı yok. Özyineleme boyunca, yığının tepesinde üst çağrılardan elde edilen çıktıyı toplayan bir dizi vardır. Her bir özyinelemeli çağrı kümesinin hemen ardından özyinelemeli çağrıların çıktısının, programın sonunda yığın doğrusal olarak yazdırıldığında çıktının doğru olduğundan emin olmak için birlikte sıkıştırılması gerekir. Özyinelemeden geçen argümanlar yığını değişkende tutulur A.

Çevrimiçi deneyin



1

Japt , 23 bayt

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

Çevrimiçi deneyin!

Ambalajsız ve Nasıl Çalışır?

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

Aktarılan kalıbı kullanma

III
 I 
III

Orijinal Hdesenden daha kolay , en azından Idize tekrarlama ve merkez dolgusu ile yapılabilecek olan Japt'ta .


0

C ++ 11 - 138 bayt

Ancak bu cevabın burada geçerli bir sözdizimi olup olmadığından emin değilim.

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

Çalışma kodu ile Ungolfed

#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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.