Створіть "H" з менших "H" s


73

Виклик

Створіть функцію або програму, яка при заданні цілого числа sizeвиконує такі дії:

Якщо sizeдорівнює 1, виведіть

H H
HHH
H H

Якщо sizeбільше 1, виведіть

X X
XXX
X X

де Xє вихід програми / функції дляsize - 1

(Якщо ви віддаєте перевагу, можливо, вам відповідає базовий випадок 0, якщо ви вказали у своїй відповіді)

Будь-який із наступних форматів виводу є прийнятним, залежно від того, що вам зручніше:

  • Рядок необхідної структури з будь-якими двома різними символами, що відповідають Hіspace

  • Двовимірний масив з необхідною структурою з будь-якими двома різними значеннями, що відповідають H іspace

  • Масив / список рядків з одним рядком виводу у кожній рядку з будь-якими двома різними значеннями, що відповідають 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
Ідеально підходить для деревного вугілля, мабуть ... lol. Також ласкаво просимо до PPCG! : D
HyperNeutrino

10
Ласкаво просимо до PPCG. Приємний перший виклик!
Адам

Чи можемо ми використовувати 0 розмірів на основі?
Adám


1
Я б назвав це "Sierpinski H"
mbomb007

Відповіді:


28

Мова Вольфрама (Mathematica) , 46 байт

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

Повертає 2d масив 0s і1 s.

Спробуйте в Інтернеті!

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(повторно) функцію кілька разів. Як і будь-яке інше подання (Jelly?) Це ArrayFlatten... ну, вбудований, але він поводиться дещо так само, як і Flatten[#,{{1,3},{2,4}}]в цьому випадку. (не
тестував

6
Для цього є вбудований, але довший. Mathematica має довгі назви функцій.
алефальфа

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

19

MATL , 12 11 байт

t:"[ACA]BX*

За умови введення n, він виводить матрицю, що містить 0іn .

Спробуйте в Інтернеті!

Щоб перетворити це в матрицю символів 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"]
   {         },*    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 - використовує свій вхід як вихідний символ. Теоретично це не призведе до правильної форми в 10, оскільки вона має дві цифри, але спроба запуску, яка руйнує мій браузер.





9

APL (Dyalog Classic) , 14 байт

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

Спробуйте в Інтернеті!

оцінений вхід n

,⍳⎕⍴3 всі n-кортежі з елементами від 0 1 2

2| мод 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))

Спробуйте в Інтернеті!

Зменшує продукт Kronecker, як безсоромний відповідь Луїса Мендо .

Нижній колонтитул добре друкує результат, але це анонімна функція, яка повертає matrixзначення " 1для" Hі "" 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[][]з 0для Hі 1для space. Це насправді "вирізає" стіну H's замість "набивання" 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

збережіть 5 байт, додавши статичний імпорт для Math.pow
Селім

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)]

Спробуйте в Інтернеті!

Функція виводить список рядків.


Пітон 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

Редагувати: -9 байт завдяки @ Potato44.


3
Ви повинні бути в змозі гольф (#)вниз , g#f=g<>f<>gякщо ви використовуєте GHC 8,4. Це тому Semigroup, що зараз в прелюдії.
Картопля44

@ Potato44: Я впевнений, що це допоможе у багатьох проблемах. Дякую!
німі

5

Perl 5 , 46 44 43 41 40 байт

1 підрахунок на основі. Використовує 0і 1для, Hі простір, має провідний 1(простір)

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

На основі класичної ідеї mtve.

Спробуйте в Інтернеті!


1
Вихід для n ≥ 3 не зовсім правильний.
примо

@primo Програма була правильною, але TIO використовує версію UTF-8 спеціальних символів. Я зафіксував посилання на використання втечі, але програма все ще працює, якщо ви використовуєте фактичні буквені символи
Тон Євангелія

Я поняття не маю, навіщо \321це потрібно, будь-який персонаж, здається, працює. //а $'також може замінити //gі $`, але я не впевнений , що це призводить до поліпшення.
примо

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, щоб побачити результат?
Фабієн

Введіть vim, натисніть клавішу Enter, введіть номер вводу (наприклад, 3) у буфер, а потім у звичайному режимі натисніть послідовність клавіш з поста.
Chiel ten Brinke

Обов’язково використовуйте ванільний
вім

У коді була помилка друку. Просто виправили.
Chiel ten Brinke

1
Працює! <kbd> Я </kbd> є великим i, а не ell. :set nowrapщоб побачити результат, для 4 і більше.
Фабієн

4

APL (Dyalog Unicode) , 38 34 байт SBCS

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

Вихід - двовимірний масив, що 1представляє Н і 0представляє простір.

Спробуйте в Інтернеті!


2
Ласкаво просимо до PPCG! Можна опустити f←і вважати символи як 1 байт кожного: codegolf.meta.stackexchange.com/questions/9428 / ... Це також вважається законним приймати вхідні дані від , тобто замінити ⍣⍵з ⍣⎕і падіння брекети зовнішньої DFN в.
ngn

Дякую! Я ніколи насправді офіційно не грав у APL раніше, тому вони повинні допомогти.
MJacquet

1 1⍴1можна записати як ⍪1і тоді паролі навколо оператора стають непотрібними. Якщо ви знайомі з поїздами - вони тут можуть дуже допомогти.
ngn

Також ваш друг: (⍵,(0×⍵),⍵)=>(⍵,⍵,⍨0×⍵)
Zacharý

4

Вугілля деревне , 30 29 байт

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

H

Друк оригіналу H.

FENX³ι«

Петля над першими sizeсилами 3.

J⁰¦⁰

Перемістіть курсор назад до початку. TrimЦе потребує цього, оскільки як оригінальний друк, так Hі відображення нижче переміщують курсор.

C⁰ι

Скопіюйте попередню ітерацію вниз, створивши доміно.

Cιι

Скопіюйте результат вниз і вправо, створивши тетроміно.

T⊗ι⊗ι

Обріжте полотно до Lтріоміно.

‖OO→↓ι

Відбийте полотно горизонтально і вертикально з накладанням, завершуючи ітерацію.

Деревне вугілля краще в деяких фракталах, ніж в інших. Ось подібна ідея, але майже в половині розміру:

HFN«⟲C²⁶‖OOLX³ι

Спробуйте в Інтернеті! Посилання на багатослівну версію коду.



4

PHP 7, 125 109 байт

інший підхід: замість того, щоб вкладати та згладжувати результат рекурсивно, він просто проходить через рядки та стовпці та використовує 3-ю петлю, щоб дізнатися, чи потрібно друкувати Hчи_ .

Редагувати: багато економив, поєднуючи петлі рядків / стовпців до однієї, хоча для зменшення правильності внутрішнього циклу знадобилося трохи. Потрібен 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 .

кваліфікована функція, 147 130 байт

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.
примо

3

Желе , 25 байт

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

Спробуйте в Інтернеті!


Хоча це довше, ніж існуюче подання желе , воно намагається генерувати кожен символ незалежно від координати.

Зокрема, якщо координата (x,y)(1-індексація), перша посилання повертається 0і 1відповідає 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-SQL , 267 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 обов’язково ознайомтесь це повідомлення!
caird coinheringaahing

Я спробував додати sqlfiddle, але це не добре працює зі змінними таблиці. Якщо я використовую звичайні таблиці, це навіть на 1 байт коротше: sqlfiddle.com/#!18/eb14e/2 . Однак вихід не форматований правильно sqlfiddle, але він працює чудово в SSMS.
Разван Сокол

1
Ви повинні мати змогу зменшити цей показник до 259, видаливши зайві пробіли та
лінійку передач

Мені дісталося лише 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, вхід береться з stdin. Вихід - H з Hs.

Спробуйте в Інтернеті!


Підрахунок на цьому веб-сайті змінився, вам більше не потрібно рахувати -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
Ви можете зберегти один байт: $s.$s.$sзамість $s.=$s.$s. І вам не потрібно <?з -Rзамість -F.
Тит

Дякую за байт. Що стосується -R, чи можете ви показати мені повне використання?
примо

Так само , як -nF: echo <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"'
Прим

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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.