小さな「H」から「H」を作成する


73

チャレンジ

整数を指定するとsize、次のことを行う関数またはプログラムを作成します。

size1に等しい場合、出力

H H
HHH
H H

場合はsize1、出力よりも大きく、

X X
XXX
X X

どこXのプログラム/関数の出力size - 1

(必要に応じて0、回答で指定する限り、ベースケースをに対応させることができます)

次の出力形式のいずれかが受け入れられますが、どちらがより便利です。

  • 任意の二つの異なる文字に対応する必要な構造の文字列Hspace

  • 対応する任意の二つの別個の値を要求される構造を有する二次元アレイ、H及びspace

  • 任意の二つの別個の値は、対応する各列における出力の一つの行と列/文字列のリスト、Hおよびspace

各行に一定量の先行スペースがある限り、先行スペースを使用できます。2つの異なる出力文字は、異なる限り、選択したものに依存します。

コードが返す出力形式を指定します。

テストケース

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

これはなので、各言語の最低バイト数が勝ちです!

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
たぶん木炭に最適...笑 PPCGへようこそ!:D
ハイパーニュートリノ

10
PPCGへようこそ。素敵な最初の挑戦!
アダム

0ベースのサイズを使用できますか?
アダム


1
私は、「シェルピンスキーH」これを呼びたい
mbomb007

回答:


28

Wolfram言語(Mathematica)、46バイト

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

0sと1sの2次元配列を返します。

オンラインでお試しください!

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

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


17
もちろん、Mathematicaには再帰的なネストされた配列のためのビルトインがあります。+1
HyperNeutrino

1
@HyperNeutrinoも明らかに
ASCIIのみ

7
@HyperNeutrinoこれはどのように組み込みと見なされますか?ただ、Nest(繰り返し)関数を複数回。他の提出物と同じように(ゼリー?)ArrayFlattenは...ビルトインですがFlatten[#,{{1,3},{2,4}}]、この場合のように動作します。(テストしなかった)
-user202729

6
これにはビルトインがありますが、もっと長いです。Mathematicaには長い関数名があります。
-alephalpha

1
upgoatチャレンジ勝利を考えると、どうしてそれができなかったのでしょうか?
-ojdo

21

Canvas14 12 バイト

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

ここで試してみてください!

説明:
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)                                                |

ここでI入力され、X前のループ(最初のループの「H」)によって生成されたパターンであり、<space>パターンの最初の3行目に空の空間であることにより、暗黙的に追加

dzaimaのおかげで-2バイト!


驚くほど短い答え:O
NL628

19

MATL12 11バイト

t:"[ACA]BX*

入力が与えられると、とnを含む行列が出力されます。0n

オンラインでお試しください!

これを文字マトリックスHとスペースに変換するにg72*cは、ヘッダーに追加します。オンラインでもお試しください!

または]1YC、マトリックスをグラフィカルに表示するために追加します。MATL Online試しください

説明

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

スタックス16 15 バイト

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

実行してデバッグする

これは、コメント付きのプログラムのASCII表現です。このプログラムはHを横向きに構築し、最後に一度転置します。

'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

ボーナス14バイトプログラム -入力を出力文字として使用します。理論的には、これは2桁なので10で正しい形状を生成しませんが、実行しようとするとブラウザーがクラッシュします。





9

APL(Dyalog Classic)、14バイト

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

オンラインでお試しください!

評価された入力n

,⍳⎕⍴3 0 1 2の要素を持つすべてのnタプル

2| mod 2

×/¨∘.≥⍨ タプルaとbのすべてのペアを比較することにより行列を形成します-aのすべての要素がbの対応する要素以上の場合、a 1、それ以外の場合は0




8

Java(OpenJDK 9)、135バイト

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

オンラインでお試しください!

返しint[][]0H1のためにspace。これは、実際Hには、「積み上げ」ではなく「」の壁を「切り分け」Hます。

説明

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の静的インポートを追加することで5バイトを節約
Selim

4
@Selim静的インポートはバイトカウントで必要です。だから私は失うだろう... 19バイト。
オリビエグレゴワール


7

Python 2、70バイト

f=lambda r:-r*'H'or[x+[x,' '*3**r][b]+x for b in 1,0,1for x in f(r-1)]

オンラインでお試しください!

関数は文字列のリストを出力します。


Python 2、84バイト

r=input()
for i in range(3**r):x,s=' H';exec"s+=[x,s][i%3%2]+s;x*=3;i/=3;"*r;print s

オンラインでお試しください!

他の3 * 3フラクタルパターンと同じテンプレートを使用します。



6

Haskell、73 67 64 55バイト

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

これはPrelude、からエクスポートさ<>れるため、の最新バージョンでのみ機能しData.Semigroupます。TIOで実行するには、次のようにインポートを追加します。オンラインで試してください!

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

編集:@ Potato44のおかげで-9バイト。


3
あなたはゴルフのことができるようにすべきである(#)までg#f=g<>f<>gあなたがGHC 8.4を使用している場合。これはSemigroup現在プレリュードにあるためです。
ポテト44

@ Potato44:これは多くの課題に役立つと確信しています。ありがとう!
nimi

5

Perl 5の46の 44 43 41 40バイト

1ベースのカウント。for およびspaceを使用0し、先頭に(スペース)があります1H1

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

mtveによる古典的なアイデアに基づいています。

オンラインでお試しください!


1
n≥3の出力は適切ではありません。
primo

@primoプログラムは正しいが、TIOはUTF-8バージョンの特殊文字を使用します。私の代わりにエスケープを使用するためのリンクを固定していますが、実際のリテラル文字を使用する場合、プログラムはまだ動作します
トンHospelを

なぜ\321必要なのかわかりませんが、どんなキャラクターでも機能するようです。//そして、$'も置き換えることができます//g$`、私はそれが改善につながるかわかりません。
プリモ

1
@primoありがとう!私はまだ(別のフラクタルパターンを生成するために使用される)\321ビット補完であった古いmtveソリューションから派生したコードから作業していました.。しかし、ビット補数を削除したので、もちろんそれはもう必要ありません。私が使用//gして$ `ので、私は簡単にコマンドラインからコードをテストすることができます(//$'私が見ることができるゲインにつながらない、獲得バイトはスペースまたはで無駄になって!再び)
トンHospel

5

Vim- 66 56 54バイト

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

入力はバッファ内の数値として取得されます。


結果を見るために、vimがインストールされていると仮定して、bashプロンプトから何を入力する必要がありますか?
ファビアン

vimと入力してEnterキーを押し、バッファーに入力番号(たとえば3)を入力してから、通常モードから投稿のキーシーケンスを押します。
Chiel 10 Brinke

必ずバニラvimを使用してください
Chiel ten Brinke

コードにタイプミスがありました。修正しただけです。
Chiel 10 Brinke

1
動作します!<kbd> I </ kbd>は大文字のiであり、エルではありません。:set nowrap4つ以上の結果を確認します。
ファビアン

4

APL(Dyalog Unicode)38 34バイトSBCS

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

出力は、1Hと0スペースを表す2次元配列です。

オンラインでお試しください!


2
PPCGへようこそ!あなたは、省略することができますf←し、それぞれ1つのバイトとして文字を数える:codegolf.meta.stackexchange.com/questions/9428/...またからの入力を取るために法的なと考えていますつまり置き換え⍣⍵⍣⎕し、外側のDFNの中括弧をドロップします。
ngn

ありがとう!APLを実際にゴルフしたことがないので、これが役立つはずです。
MJacquet

1 1⍴1と書く⍪1と、演算子の周りの括弧が不要になります。あなたが電車に精通している場合-彼らはここで多くを助けることができます。
-ngn

また、あなたの友達です:(⍵,(0×⍵),⍵)=>(⍵,⍵,⍨0×⍵)
ザカリー

4

30 29バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

H

オリジナルを印刷しHます。

FENX³ι«

size3 の最初の累乗でループします。

J⁰¦⁰

カーソルを原点に戻します。Trimの元の印刷とH下の反射の両方がカーソルを移動するため、これが必要です。

C⁰ι

前の反復を下方にコピーして、ドミノを作成します。

Cιι

結果を上下にコピーして、テトロミノを作成します。

T⊗ι⊗ι

キャンバスをLシェイプトリオミノにトリミングします。

‖OO→↓ι

キャンバスをオーバーラップして水平および垂直に反映し、反復を完了します。

いくつかのフラクタルの炭は他のフラクタルよりも優れています。同様のアイデアがありますが、サイズはほぼ半分です。

HFN«⟲C²⁶‖OOLX³ι

オンラインでお試しください!リンクは、コードの詳細バージョンです。



4

PHP 7、125 109バイト

異なるアプローチ:代わりに営巣し、再帰的に結果を平坦化するが、これはただの行と列をループして印刷するかどうかを確認するために第三のループを使用していますH_

編集:行/列ループを1つに結合することで大幅に節約されましたが、内側のループの減少を修正するには少し時間がかかりました。パワーオペレーターにはPHP 7が必要です。

オンラインで試してみてください


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

結果を出力します。パイプとして実行-nRます。

修飾関数、147130バイト

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

単一の文字列を返します。デフォルト設定で実行します(no php.ini)。


1
%3==1に置き換えることができます%3&1
primo

3

ゼリー、25バイト

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

オンラインでお試しください!


これは既存のJelly提出よりも長くなりますが、座標だけから独立して各キャラクターを生成しようとします。

具体的には、座標がある(x,y)(1-インデキシング)、第一リンク戻る01に対応Hし、 それぞれ。


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

また、5バイトị⁾ HYはフォーマットに使用されるため、このプログラム(20バイト)も有効です(ただし、出力は見栄えがよくありません)。

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

3

T-SQL267 261バイト

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

これがCode Golfに対する私の最初の回答です。間違いを犯した場合は私を助けてください。また、私の好みの言語はTransact-SQLであり、短いコードにはあまり適していません。
ラズバンソコル

1
PPCGへの最初の投稿へようこそ!T-SQLでのゴルフに関するヒントについては、この投稿を確認してください。
コイナーリンガーアーイング

sqlfiddleを追加しようとしましたが、テーブル変数ではうまく機能しません。通常のテーブルを使用する場合は、さらに1バイト短くなります:sqlfiddle.com / #!18 / eb14e/2。ただし、出力はsqlfiddleによって正しくフォーマットされていませんが、SSMSでは正常に機能します。
ラズバンソコル

1
あなたは、いくつかの不要な空白や改行を削除することによって259にこれを降りることができるはず
MickyT

261になりました。何が欠けていますか?
ラズバンソコル


2

Perl、64バイト

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

が必要で-p、入力はstdinから取得されます。出力はHsのHです。

オンラインでお試しください!


このサイトでのカウントが変更され、カウントする必要がなくなりました-p(perlにはあまりにも寛大だと思いますが、それは今のようです)
トンホスペル

2

PHP(5.6以降)、94バイト

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

-Fコマンドラインオプションと共に使用します。インタプリタのデフォルト(-n)を想定しています。パワーオペレータのため、5.6より前のバージョンでは動作しません。

サンプル使用法

$ 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

オンラインでお試しください!


1
1バイトを保存できます:の$s.$s.$s代わりに$s.=$s.$s。そしての代わりに<?-R使う必要はありません-F
タイタス

バイトをありがとう。について-R、完全な使用方法を教えてください。
プリモ

ただ、好き-nFecho <input> | php -nR '<code>'-rほぼ同じです:php -nr '<code>' <arguments>
タイタス

たぶん私はそれが働いて得るためにあまりにも愚かだ:/ i.stack.imgur.com/jqpmk.png
プリモ

1
preg_filter改行を保持しながら各行を反復することjoin("\n",array_map(function(){...},split("\n",$s.$s.$s)))です。これはほぼに相当しますが、冗長性は大幅に低下します。私は最初に持っていましたstr_padが、sprintf1バイト短くなったために変更しました'"\0".str_pad($$i++/$i&1?"\0":"",$i)."\0"'
primo

1

CJam- 103 97 87 76バイト

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

このプログラムは、非常に冗長な「ハンドコーディングされた」再帰を実行します。スマートマトリックス乗算はありません。再帰全体を通して、スタックの最上部には、親呼び出しから取得した出力を収集する配列があります。再帰呼び出しの各セットの直後に、再帰呼び出しの出力をまとめて圧縮する必要があります。これは、プログラムの最後にスタックが直線的に印刷されるときに出力が正しいことを確認するためです。再帰に渡される引数のスタックは、変数に保持されますA

オンラインで試す



1

Japt、23バイト

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

オンラインでお試しください!

開梱と仕組み

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

転置パターンを使用する

III
 I 
III

H少なくともJaptでは、I文字列の繰り返しと中央のパディングで処理できるため、元のパターンよりも処理がはるかに簡単です。


0

C ++ 11-138バイト

ただし、この回答に有効な構文があるかどうかはわかりません。

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

作業コードでゴルフを解き放つ

#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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.