从较小的“ H”创建一个“ H”


73

挑战

创建一个函数或程序,当给定整数时size,该函数或程序将执行以下操作:

如果size等于1,则输出

H H
HHH
H H

如果size大于1,则输出

X X
XXX
X X

X程序/功能的输出在哪里size - 1

(只要您愿意,0只要您在答案中指定,就可以使基本情况与相对应)

可以使用以下任何一种输出格式,以您更方便的方式:

  • 所需结构的字符串,其中任意两个不同的字符分别对应于Hspace

  • 具有所需结构的二维数组,其中任意两个不同的值分别对应于Hspace

  • 字符串的数组/列表,每个字符串中有一行输出,并且与H和对应的任意两个不同的值space

只要每行上有恒定数量的前导空格,就可以使用前导空格。两个不同的输出字符可以取决于您选择的任何内容,只要它们不同即可。

指定代码返回的输出格式。

测试用例

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

10
欢迎来到PPCG。不错的第一个挑战!
亚当

我们可以使用基于0的尺寸吗?
亚当


1
我将其称为“ Sierpinski H”
mbomb007

Answers:


28

Wolfram语言(Mathematica),46字节

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

返回0s和1s 的二维数组。

在线尝试!

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

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


17
Mathematica当然具有递归嵌套数组的内置笑声了。+1
HyperNeutrino,

1
@HyperNeutrino很明显
只有ASCII码

7
@HyperNeutrino这如何被认为是内置的?刚Nest(反复)函数多次。像任何其他提交一样(Jelly?),它ArrayFlatten是……很好,内置的,但Flatten[#,{{1,3},{2,4}}]在这种情况下,其行为有点像。(未测试)
user202729

6
有一个内置的,但是更长。Mathematica具有长函数名。
alephalpha

1
考虑到它在上升挑战赛上的胜利,怎么可能呢?
ojdo

21

画布14 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>是在图案的第一和第三行中的空的空间中,由隐式添加

-2个字节,感谢dzaima


答案很简单:O
NL628 '18

19

MATL12 11字节

t:"[ACA]BX*

给定输入n,这将输出包含0和的矩阵n

在线尝试!

要将其转换为和的字符矩阵,请在标头中H添加g72*c也可以在线尝试!

或添加]1YC以图形方式显示矩阵。在MATL在线上尝试一下

说明

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

Stax16 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字节程序 -使用其输入作为输出字符。从理论上讲,这不会在10处产生正确的形状,因为它有2位数字,但是尝试运行会使我的浏览器崩溃。





9

APL(Dyalog Classic),14个字节

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

在线尝试!

评估输入n

,⍳⎕⍴3 元素从0 1 2开始的所有n元组

2| Mod 2

×/¨∘.≥⍨ 通过比较每对元组a和b形成矩阵-如果a的所有元素≥b的对应元素,则为1,否则为0



8

R,64字节

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

在线尝试!

作为Luis Mendo的回答的无耻端口,减少了Kronecker的乘积。

页脚打印结果很好,但它是一个匿名函数返回matrix1用于H0空间。


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[][]带有0for H1for的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个字节。
奥利维尔·格雷戈雷(OlivierGrégoire)



6

J25 22字节

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

在线尝试!

        */               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字节

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

编辑:-9个字节,感谢@ Potato44。


3
如果您使用的是GHC 8.4 (#)g#f=g<>f<>g则应该能够打高尔夫球。这是因为Semigroup现在处于序幕。
Potato44 '18

@ Potato44:我很确定这将有助于解决许多挑战。谢谢!
nimi

5

Perl 5中46个 44 43 41 40字节

基于1的计数。用途01用于H和空间,拥有国内领先的1(空间)

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

基于mtve的经典想法。

在线尝试!


1
n≥3的输出不太正确。
primo

@primo程序是正确的,但TIO使用特殊字符的UTF-8版本。我修复了使用转义符的链接,但是,如果您使用实际的文字字符,该程序仍然可以工作
Ton Hospel

我不知道为什么\321有必要,任何角色似乎都可以工作。//并且$'也可以替换//g$`,但是我不确定它是否可以带来改善。
primo

1
@primo谢谢!我仍在使用从旧mtve解决方案派生而来的代码(其中\321的位互补.(用于生成另一个分形模式))工作。但是我放弃了位补码,所以我当然不再需要了。我使用了//g$`,所以我可以轻松地//$'!
从命令行

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提示符开始我要键入什么才能看到结果?
Fabien

键入vim,按Enter,在缓冲区中键入输入数字(例如3),然后在正常模式下,按帖子中的键序列。
Chiel 10 Brinke

确保使用香草vim
Chiel十Brinke

代码中有错字。修复它。
Chiel 10 Brinke

1
作品!<kbd> I </ kbd>是大写的i,而不是ell。:set nowrap查看结果(4个或更多)。
法比恩'18

4

APL(Dyalog Unicode)38 34字节SBCS

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

输出是一个二维数组,1表示H和0表示空间。

在线尝试!


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³ι«

循环size使用3 的第一个幂。

J⁰¦⁰

将光标移回原点。Trim需要这样做,因为的原始打印H和下面的反射都会移动光标。

C⁰ι

向下复制先前的迭代,创建一个多米诺骨牌。

Cιι

左右复制结果,创建一个四聚体。

T⊗ι⊗ι

将画布修剪成L形状为triomino 的形状。

‖OO→↓ι

重叠水平和垂直反射画布,完成迭代。

木炭在某些分形上比其他分形更好。这是一个类似的想法,但是大小几乎是一半:

HFN«⟲C²⁶‖OOLX³ι

在线尝试!链接是详细版本的代码。



4

PHP 7,125 109字节

一种不同的方法:而不是递归嵌套和扁平化结果,而是循环遍历行和列,并使用3rd循环查找是否要打印H_

编辑:通过将行/列循环合并为一个,节省了很多,尽管花了一点时间才能正确减少内部循环。需要Power Operator的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;}

返回一个字符串。使用默认配置运行(否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-SQL267261字节

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中打高尔夫球的提示,请务必查看这篇文章!
Caird coinheringaahing

我尝试添加一个sqlfiddle,但它不适用于表变量。如果我使用普通表,它甚至还要短1个字节:sqlfiddle.com/# !18 / eb14e/2。但是,输出未通过sqlfiddle正确格式化,但在SSMS中工作正常。
拉兹万·索科尔

1
通过删除一些不必要的空格和换行符,您应该可以将其降低到259
MickyT

我只打到261。我想念什么?
拉兹万·索科尔

2

PHP 7,153字节

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

使用默认配置运行(否php.ini)或在线尝试


2

Perl,64个字节

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

需要-p,输入取自标准输入。输出是Hs 的H。

在线尝试!


该站点的计数已更改,您不再需要计数-p(我认为它对perl太宽容了,但是现在是这样)
Ton Hospel

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
您可以保存一个字节:$s.$s.$s而不是$s.=$s.$s。并且您不需要<?with -R代替-F
泰特斯(Titus)'18

感谢您的字节。关于-R,您能告诉我完整的用法吗?
primo

就像-nFecho <input> | php -nR '<code>'-r几乎相同:php -nr '<code>' <arguments>
泰特斯

也许我太愚蠢而无法正常工作:/ i.stack.imgur.com/jqpmk.png
primo

1
preg_filter是在保留换行符的同时迭代每行,大致等效于join("\n",array_map(function(){...},split("\n",$s.$s.$s))),但冗长得多。我最初有str_pad更改,但是sprintf因为它短了一个字节:'"\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;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.