Tạo một tên H hạng từ nhỏ hơn


73

Thử thách

Tạo một hàm hoặc chương trình mà khi được cung cấp một số nguyên sizesẽ thực hiện như sau:

Nếu sizebằng 1, đầu ra

H H
HHH
H H

Nếu sizelớn hơn 1, đầu ra

X X
XXX
X X

nơi Xlà sản phẩm của chương trình / chức năng chosize - 1

(Nếu bạn thích, bạn có thể có trường hợp cơ sở tương ứng 0, miễn là bạn chỉ định trong câu trả lời của mình)

Bất kỳ định dạng đầu ra nào sau đây đều được chấp nhận, bất kỳ định dạng nào thuận tiện hơn cho bạn:

  • Một chuỗi cấu trúc cần thiết với bất kỳ hai ký tự riêng biệt tương ứng với Hspace

  • Một mảng hai chiều với cấu trúc được yêu cầu, với bất kỳ hai giá trị riêng biệt tương ứng với Hspace

  • Một mảng / danh sách các chuỗi, với một dòng đầu ra trong mỗi chuỗi, với hai giá trị riêng biệt tương ứng với Hspace

Không gian hàng đầu được phép, miễn là có một số lượng không gian hàng đầu liên tục trên mỗi dòng. Hai ký tự đầu ra riêng biệt có thể phụ thuộc vào bất cứ thứ gì bạn chọn, miễn là chúng khác nhau.

Chỉ định định dạng đầu ra mà mã của bạn đang trả về.

Các trường hợp thử nghiệm

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

Đây là , vì vậy số byte thấp nhất cho mỗi ngôn ngữ sẽ thắng!

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
Hoàn hảo cho Char than có lẽ ... lol. Cũng chào mừng bạn đến với PPCG! : D
HyperNeutrino

10
Chào mừng đến với PPCG. Thử thách đầu tiên tốt đẹp!
Adám

Chúng tôi có thể sử dụng 0 kích cỡ dựa trên?
Adám


1
Tôi sẽ gọi nó là "
Sierpinki

Câu trả lời:


28

Ngôn ngữ Wolfram (Mathicala) , 46 byte

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

Trả về mảng 2d của 0s và 1s.

Hãy thử trực tuyến!

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

Nest [ArrayFlatten @ {r = {#, 0, #}, {#, #, #}, r} &, 1, #] & [5] // Hình ảnh


17
Tất nhiên là cái quái gì Mathicala có tích hợp cho các mảng lồng nhau đệ quy lol. +1
HyperNeutrino

1
@HyperNeutrino rõ ràng
ASCII chỉ có

7
@HyperNeutrino Điều này được coi là tích hợp như thế nào? Chỉ cần Nest(lặp đi lặp lại) chức năng nhiều lần. Giống như bất kỳ bài nộp nào khác (Jelly?) Cái ArrayFlattennày ... tốt, được tích hợp sẵn, nhưng nó hoạt động hơi giống như Flatten[#,{{1,3},{2,4}}]trong trường hợp này. (không kiểm tra)
user202729


1
Làm thế nào mà nó không thể, với chiến thắng của nó ở thử thách upgoat ?
ojdo

21

Canvas , 14 12 byte

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

Hãy thử nó ở đây!

Giải trình:
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)                                                |

Nơi Ilà đầu vào, Xlà mô hình được tạo ra bởi các vòng trước đó ( "H" cho vòng đầu tiên), và <space>là không gian trống trên hàng đầu tiên và thứ ba của mô hình, thêm ngầm bằng .

-2 byte nhờ dzaima !


Câu trả lời ngắn đáng kinh ngạc: O
NL628

19

MATL , 12 11 byte

t:"[ACA]BX*

Cho đầu vào n, điều này đưa ra một ma trận chứa 0n.

Hãy thử trực tuyến!

Để chuyển đổi nó thành một ma trận ký tự Hvà không gian thêm g72*cvào tiêu đề. Hãy thử trực tuyến quá!

Hoặc thêm ]1YCđể xem ma trận hiển thị đồ họa. Hãy thử nó tại MATL Online!

Giải trình

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"

Chạy và gỡ lỗi nó

Đây là đại diện ascii của chương trình với ý kiến. Chương trình này xây dựng H sang một bên, và sau đó chuyển đổi một lần vào cuối.

'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

Chương trình thưởng 14 byte - sử dụng đầu vào của nó làm ký tự đầu ra. Về mặt lý thuyết, điều này sẽ không tạo ra hình dạng đúng ở mức 10, vì nó có 2 chữ số, nhưng cố gắng chạy mà làm hỏng trình duyệt của tôi.





9

APL (Dyalog Classic) , 14 byte

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

Hãy thử trực tuyến!

đánh giá đầu vào n

,⍳⎕⍴3 tất cả các bộ dữ liệu có các phần tử từ 0 1 2

2| mod 2

×/¨∘.≥⍨ tạo thành một ma trận bằng cách so sánh mọi cặp tuple a và b - nếu tất cả các phần tử của a là elements các phần tử tương ứng của b, thì đó là 1, nếu không thì 0



8

R , 64 byte

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

Hãy thử trực tuyến!

Giảm bởi sản phẩm Kronecker, như một cổng không biết xấu hổ của câu trả lời của Luis Mendo .

Chân in kết quả độc đáo, nhưng đây là một chức năng ẩn danh mà trả về một matrixcủa 1cho H0cho không gian.


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

Hãy thử trực tuyến!

Trả về int[][]với 0cho H1cho space. Điều này thực sự "khắc" một bức tường Hthay vì "đóng cọc" H.

Giải thích

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

lưu 5 byte bằng cách thêm nhập tĩnh cho Math.pow
Selim

4
@Seach việc nhập tĩnh được yêu cầu trong số byte. Vì vậy, tôi sẽ mất ... 19 byte.
Olivier Grégoire




6

Haskell, 73 67 64 55 byte

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

Điều này chỉ hoạt động với phiên bản mới nhất Prelude, bởi vì nó xuất khẩu <>từ Data.Semigroup. Để chạy nó trên TIO, hãy thêm một lần nhập như được thực hiện tại đây: Hãy thử trực tuyến!

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

Chỉnh sửa: -9 byte nhờ @ Potato44.


3
Bạn có thể chơi golf (#)xuống g#f=g<>f<>gnếu bạn sử dụng GHC 8.4. Điều này là bởi vì Semigroupbây giờ là trong khúc dạo đầu.
Khoai tây44

@ Potato44: Tôi khá chắc chắn rằng điều này sẽ giúp ích trong rất nhiều thử thách. Cảm ơn!
nimi

5

Perl 5 , 46 44 43 41 40 byte

Đếm 1 dựa. Sử dụng 01cho Hvà không gian, có một 1(không gian) hàng đầu

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

Dựa trên một ý tưởng cổ điển của mtve.

Hãy thử trực tuyến!


1
Đầu ra cho n ≥ 3 không hoàn toàn đúng.
Primo

@primo Chương trình đã đúng nhưng TIO sử dụng phiên bản UTF-8 của các ký tự đặc biệt. Tôi đã sửa liên kết để sử dụng lối thoát thay thế, nhưng chương trình vẫn hoạt động nếu bạn sử dụng các ký tự theo nghĩa đen thực tế
TonMedel

Tôi không biết tại sao \321cần thiết, bất kỳ nhân vật dường như làm việc. //$'cũng có thể thay thế //g$`, nhưng tôi không chắc nó sẽ dẫn đến một sự cải tiến.
Primo

1
@primo Cảm ơn! Tôi vẫn đang làm việc từ mã có nguồn gốc từ giải pháp mtve cũ, nơi \321bổ sung bit .(được sử dụng để tạo ra một mẫu fractal khác). Nhưng tôi đã bỏ phần bổ sung bit nên dĩ nhiên tôi không cần điều đó nữa. Tôi đã sử dụng //gvà $ `vì vậy tôi có thể dễ dàng kiểm tra mã từ dòng lệnh ( //$'không dẫn đến mức tăng mà tôi có thể thấy, byte thu được bị lãng phí với một khoảng !
trắng

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

Đầu vào được lấy dưới dạng số trong bộ đệm.


Tôi phải nhập gì, bắt đầu từ dấu nhắc bash, giả sử tôi đã cài đặt vim, để xem kết quả?
Fabien

Nhập vim, nhấn enter, nhập số đầu vào (ví dụ 3) trong bộ đệm, sau đó, từ chế độ bình thường, nhấn chuỗi phím từ bài đăng.
Chiel ten Brinke

Hãy chắc chắn sử dụng vanilla vim
Chiel ten Brinke

Có một lỗi đánh máy trong mã. Chỉ cần sửa nó.
Chiel ten Brinke

1
Làm! <kbd> I </ kbd> là chữ i, không phải hình elip. :set nowrapđể xem kết quả, cho 4 và nhiều hơn nữa.
Fabien

4

APL (Dyalog Unicode) , 38 34 byte SBCS

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

Đầu ra là một mảng 2 chiều với 1đại diện cho H và 0đại diện cho không gian.

Hãy thử trực tuyến!


2
Chào mừng đến với PPCG! Bạn có thể bỏ qua f←và đếm ký tự như 1 byte mỗi: codegolf.meta.stackexchange.com/questions/9428/... Nó cũng được coi là hợp pháp để lấy đầu vào từ , tức là thay thế ⍣⍵với ⍣⎕và thả niềng răng các DFN ngoài của.
ngn

Cảm ơn! Tôi chưa bao giờ thực sự chơi APL trước đây vì vậy những điều này sẽ giúp ích.
MJacquet

1 1⍴1có thể được viết ⍪1và sau đó các parens xung quanh toán tử trở nên không cần thiết. Nếu bạn quen thuộc với tàu hỏa - họ có thể giúp đỡ rất nhiều ở đây.
ngn

Ngoài ra, là bạn của bạn: (⍵,(0×⍵),⍵)=>(⍵,⍵,⍨0×⍵)
Zacharý

4

Than , 30 29 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

H

In bản gốc H.

FENX³ι«

Lặp lại các sizequyền hạn đầu tiên của 3.

J⁰¦⁰

Di chuyển con trỏ trở lại điểm gốc. Trimcần điều này, vì cả bản in gốc Hvà phản chiếu bên dưới đều di chuyển con trỏ.

C⁰ι

Sao chép lần lặp trước xuống dưới, tạo ra một domino.

Cιι

Sao chép kết quả xuống và phải, tạo ra một tetromino.

T⊗ι⊗ι

Cắt vải xuống một Lhình triomino.

‖OO→↓ι

Phản chiếu khung vẽ theo chiều ngang và chiều dọc với sự chồng chéo, hoàn thành việc lặp lại.

Than là tốt hơn ở một số fractals hơn những người khác. Đây là một ý tưởng tương tự, nhưng với kích thước gần một nửa:

HFN«⟲C²⁶‖OOLX³ι

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã.



4

PHP 7, 125 109 byte

một cách tiếp cận khác: Thay vì lồng và làm phẳng kết quả theo cách đệ quy, điều này chỉ lặp qua các hàng và cột và sử dụng vòng lặp thứ 3 để tìm hiểu xem có nên in Hhay không _.

Chỉnh sửa: Đã lưu rất nhiều bằng cách kết hợp các vòng lặp hàng / cột thành một, mặc dù phải mất một chút để có được mức giảm cho vòng lặp bên trong chính xác. Yêu cầu PHP 7 cho toán tử điện.

Hãy thử chúng trực tuyến !


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

in kết quả. Chạy như ống với -nR.

chức năng đủ điều kiện, 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;}

trả về một chuỗi đơn Chạy với cấu hình mặc định (không php.ini).


1
%3==1có thể được thay thế bằng %3&1.
Primo

3

Thạch , 25 byte

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

Hãy thử trực tuyến!


Mặc dù điều này dài hơn trình đệ trình Jelly hiện có , nhưng nó cố gắng tạo ra từng ký tự một cách độc lập chỉ từ tọa độ.

Cụ thể, nếu tọa độ là (x,y)(lập chỉ mục 1), liên kết đầu tiên trả về 01tương ứng H tương ứng.


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

Ngoài ra, 5 byte ị⁾ HYđược sử dụng để định dạng, vì vậy chương trình này (20 byte) cũng hợp lệ (nhưng đầu ra trông không đẹp mắt):

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

Đây là câu trả lời đầu tiên của tôi về Code Golf, vì vậy hãy giúp tôi nếu tôi mắc lỗi. Ngoài ra, ngôn ngữ ưa thích của tôi là Transact-SQL, không phù hợp với mã ngắn.
Razvan Socol

1
Chào mừng bạn đến với PPCG và bài đăng đầu tiên tốt đẹp! Để biết các mẹo về chơi gôn trong T-SQL, hãy đảm bảo kiểm tra bài này !
caird coinheringaahing 11/03/18

Tôi đã thử thêm một sqlfiddle, nhưng nó không hoạt động tốt với các biến bảng. Nếu tôi sử dụng các bảng bình thường, nó thậm chí còn ngắn hơn 1 byte: sqlfiddle.com/#!18/eb14e/2 . Tuy nhiên, đầu ra không được định dạng chính xác bởi sqlfiddle, nhưng nó hoạt động tốt trong SSMS.
Razvan Socol

1
Bạn sẽ có thể giảm xuống còn 259 bằng cách xóa một số khoảng trắng và đường dẫn không cần thiết
MickyT

Tôi chỉ nhận được 261. Tôi còn thiếu gì?
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;}

Chạy với cấu hình mặc định (không php.ini) hoặc thử trực tuyến .


2

Perl, 64 byte

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

Yêu cầu -p, đầu vào được lấy từ stdin. Đầu ra là một H của Hs.

Hãy thử trực tuyến!


Đếm trên trang web này đã thay đổi, bạn không cần phải đếm -pnữa (tôi nghĩ rằng nó quá khoan dung đối với perl, nhưng đó là như bây giờ)
TonMedel

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;

Được sử dụng với -Ftùy chọn dòng lệnh. Giả sử thông dịch mặc định ( -n). Sẽ không hoạt động trên các phiên bản trước 5.6, do nhà điều hành điện.

Sử dụng mẫu

$ 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

Hãy thử trực tuyến!


1
Bạn có thể lưu một byte: $s.$s.$sthay vì $s.=$s.$s. Và bạn không cần phải <?-Rthay vì -F.
Tít

Cảm ơn các byte. Về -R, bạn có thể chỉ cho tôi cách sử dụng đầy đủ?
Primo

Cũng giống như -nF: echo <input> | php -nR '<code>'. -rgần như giống nhau : php -nr '<code>' <arguments>.
Tít

Có lẽ tôi quá ngu ngốc để khiến nó hoạt động: / i.stack.imgur.com/jqpmk.png
primo

1
preg_filterlà lặp lại từng dòng trong khi duy trì các dòng mới, gần tương đương với join("\n",array_map(function(){...},split("\n",$s.$s.$s))), nhưng ít dài hơn đáng kể. Ban đầu tôi đã str_padthay đổi nhưng sprintfvì nó ngắn hơn một 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*

Chương trình này thực hiện một đệ quy "mã hóa" khá dài dòng. Không nhân ma trận thông minh. Trong suốt quá trình đệ quy, trên đầu ngăn xếp có một mảng tập hợp đầu ra thu được từ các lệnh gọi cha. Ngay sau mỗi bộ cuộc gọi đệ quy, đầu ra của các cuộc gọi đệ quy cần được nén lại với nhau, để đảm bảo đầu ra chính xác khi ngăn xếp được in tuyến tính ở cuối chương trình. Chồng các đối số được truyền xuống đệ quy được giữ trong biến A.

Thử trực tuyến



1

Japt , 23 byte

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

Hãy thử trực tuyến!

Giải nén & Cách thức hoạt động

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

Sử dụng mô hình chuyển đổi

III
 I 
III

dễ xử lý hơn nhiều so với Hmẫu ban đầu , ít nhất là trong Japt, nơi Icó thể được thực hiện với lặp lại chuỗi và đệm trung tâm.


0

C ++ 11 - 138 byte

Không chắc chắn nếu câu trả lời này có một cú pháp hợp lệ ở đây tuy nhiên.

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

Ung thư với mã làm việc

#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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.