У в'язниці зараз


18

Виклик

Враховуючи ціле число n(де 4<=n<=10**6) як вхід, створіть ASCII арт "тюремну двері" * вимірювання n-1символів у ширину та nсимволи у висоту, використовуючи символи з наведеного нижче прикладу.


Приклад

╔╦╗
╠╬╣
╠╬╣
╚╩╝

Використовувані символи:

┌───────────────┬─────────┬───────┐
│ Position      │ Symbol  │ Char  │
├───────────────┼─────────┼───────┤
│ Top Left      │    ╔    │ 9556  │
├───────────────┼─────────┼───────┤
│ Top           │    ╦    │ 9574  │
├───────────────┼─────────┼───────┤
│ Top Right     │    ╗    │ 9559  │
├───────────────┼─────────┼───────┤
│ Right         │    ╣    │ 9571  │
├───────────────┼─────────┼───────┤
│ Bottom Right  │    ╝    │ 9565  │
├───────────────┼─────────┼───────┤
│ Bottom        │    ╩    │ 9577  │
├───────────────┼─────────┼───────┤
│ Bottom Left   │    ╚    │ 9562  │
├───────────────┼─────────┼───────┤
│ Left          │    ╠    │ 9568  │
├───────────────┼─────────┼───────┤
│ Inner         │    ╬    │ 9580  │
└───────────────┴─────────┴───────┘

Правила

  • Ви можете брати інформацію будь-яким розумним, зручним способом, якщо це дозволено стандартними правилами вводу / виводу .
  • Для цілей цього виклику в мовах, де символи, які використовуються для побудови «дверей», є багатобайтовими символами, їх можна зараховувати до вашого рахунку як один байт кожен.
  • Усі інші символи (одно- або багатобайтові) слід вважати нормальними.
  • Вихідні дані не можуть містити пробілів, але крайній новий рядок дозволений, якщо це абсолютно необхідно.
  • Це тому виграє найменший байт.

Випробування

Input: 4
Output:
╔╦╗
╠╬╣
╠╬╣
╚╩╝

Input: 8
Output:
╔╦╦╦╦╦╗
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╚╩╩╩╩╩╝

Input: 20
Output:
╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝

* Так, я знаю, що чим більше це стає, тим менше виглядає двері в'язниці! : D


4
Це було б добре, якби ви могли ввести і x, і розміри
Beta Decay

15
Це було в пісочниці більш ніж довго, щоб ви могли це підказати.
Кудлатий

Чи може моя програма містити рівне корито, яке не знаходиться в кодовій сторінці? Якщо ні, то "'Z“ζдозволено як вартість одного байта (або 2)? (push 9580, перетворити на unicode)?
dzaima

@dzaima Для цілей цього виклику в мовах, де символи, які використовуються для "дверей", приймають кілька байтів, їх можна зараховувати до вашого рахунку як один байт кожен.
Okx

@Okx `╬` - не підлягає повторенню в будь-якій кількості байтів, "'Z“ζдорівнює одному байту, як у javascript "╬"вартістю 1 байт
dzaima

Відповіді:


9

Java 8, 156 151 148 118 байт

n->{String a="╔",b="╠",c="╚";for(int i=n;i-->3;a+="╦",b+="╬")c+="╩";a+="╗\n";for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}

-30 байт, створивши порт відповіді @raznagul C # (.NET Core) , після того як я пограв у 5 байт.

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

Старий 148 байт відповідь:

n->{String r="╔";int i=n,j;for(;i-->3;r+="╦");r+="╗\n╠";for(i=n;i-->2;r+="╣\n"+(i>2?"╠":"╚"))for(j=n;j-->3;r+="╬");for(;n-->3;r+="╩");return r+"╝";}

-5 байт завдяки @raznagul .

Пояснення:

Спробуйте тут.

n->{                   // Method with integer parameter and String return-type
  String r="╔";        //  Result String (starting with the top-left corner)
  int i=n,j;           //  Indexes `i` and `j`
  for(;i-->3;          //  Loop (1) `n`-3 times:
      r+="╦"           //   Append result with top edges
  );                   //  End of loop (1)
  r+="╗\n╠";           //  Append result with the top-right corner, new-line and left edge
  for(i=n;i-->2        //  Loop (2) `n`-2 times
      ;                //     After every iteration:
      r+="╣\n"         //   Append result with right edge and new-line
      +(i>2?"╠":"╚"))  //    + either the left edge or bottom-left corner
    for(j=n;j-->3;     //   Inner loop (3) `n`-3 times:
        r+="╬"         //    Append result with middle section
    );                 //   End of inner loop (3)
                       //  End of loop (2) (implicit / single-line body)
  for(;n-->3;          //  Loop (4) `n`-3 times:
    r+="╩"             //   Append result with bottom edges
  );                   //  End of loop (4)
  return r+"╝";        //  Return result with its bottom-right corner
}                      // End of method

Чи можете ви зберегти будь-які байти за допомогою кодів escape / char замість жорсткого кодування?
TheLethalCoder

@TheLethalCoder Можливо, але оскільки стан правила виклику ми можемо вважати символи як 1 байт кожен, він, ймовірно, коротший, як це (отже, підрахунок 156 байт замість фактичного 176). Але не соромтеся спробувати деякі речі, щоб скоротити їх за допомогою char-кодів.
Кевін Кройсейсен

Ах, я пропустив цю частину правил.
TheLethalCoder

2
+1 для -->оператора перехід ( ).
raznagul

1
Якщо ви використовуєте i-->3, i-->2і j-->3´ you can save 5 bytes by removing the n- = 3` і n+1.
raznagul

7

Вугілля , 34 - 5 = 29 байт

A⁻N³γUB╬↓×╠γ╠¶╚×╩γ‖BOγ‖BO↑⁺γ

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. 5 байтових скорочень призначено для символів малювання в коробці.

ReflectOverlapOverlap(0)має бути еквівалентним, ReflectMirror()але замість цього Деревне вугілля просто робить ReflectTransform()замість цього, інакше це рішення також працює n=3. Ось вирішення, яке показує, що буде n=3для 38 - 5 = 33 байт:

A⁻N³γUB╬↓×╠γ╠¶╚×╩γ¿γ‖BOγ‖M‖BO↑⁺γ¹

Ще краще, якщо я ReflectOverlapOverlap(0)працював, але я не переймався підтримкою n=3, то я міг би це зробити за 31 - 4 = 27 байт:

A⁻N³γUB╬↓×╠γ╚×╩γ‖BOγ‖BO↑⁻γ¹

1
Хм, не знав , що деревне вугілля також відображає / дзеркала в і такі. " Байтовий лічильник Charcoal чомусь не працює. Можливо, лічильник байтів Charcoal не працює, оскільки ці символи не входять до його кодової сторінки? Ви можете порахувати їх по 1 байтові відповідно до правил виклику, тож це дійсно 27.
Кевін Круїйсен

@KevinCruijssen Це залежить від оператора, який ви використовуєте. (Я мушу повертатися назад і перевіряти кожен раз; їх є декілька, і це стає заплутаним ...)
Ніл,

@Neil На жаль, ця помилка виправить якнайшвидше. Дякуємо, що знайшли!
Лише ASCII

@Neil Також чомусь він порушений, коли n = 4
лише ASCII



6

Haskell, 75 байт

w i(a:b:c)=a:(b<$[4..i])++c
f n=concat$w(n+1)$w n<$>["╔╦╗\n","╠╬╣\n","╚╩╝"]  

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

Функція wприймає ціле число iта список, де aє перший, bдругий елемент та cрешта списку та складає новий список a, а потім - i-3копії b, за якими c. Застосуйте wспочатку кожен елемент списку, ["╔╦╗\n","╠╬╣\n","╚╩╝"]а потім знову (зі iзбільшенням 1) на отриманому списку. Об’єднайтеся в єдиний список.


Що таке <$ оператор? Це просто >> з аргументами перевернуті?
Aneesh Durg

@AneeshDurg: <$родом з Data.Functorі був введений в експлуатацію Prelude. Це майже те саме, що >>. a <$ bзамінює кожен елемент на bна a, тоді як b >> aрозраховує, aщо це список і поєднує довжину bкопій a. [1,2] >> "aa"-> "aaaa", "aa" <$ [1,2]-> ["aa","aa"]. Примітка: 'x' <$ [1,2]дорівнює [1,2] >> "x".
німі

5

Vim, 29 байт

3<C-x>C╔╦╗
╠╬╣
╚╩╝<Esc>h<C-v>kkx@-Pjyy@-p

Оскільки є контрольні символи, ось дамп xxd:

00000000: 3318 43e2 9594 e295 a6e2 9597 0de2 95a0  3.C.............
00000010: e295 ace2 95a3 0de2 959a e295 a9e2 959d  ................
00000020: 1b68 166b 6b78 402d 506a 7979 402d 70    .h.kkx@-Pjyy@-p

Спробуйте в Інтернеті!(Здається, що в інтерпретатора V є проблеми з екзотичними персонажами, тому ця посилання використовує більш світські.)

Пояснення

3<C-x>     " Decrement the number by 3
C╔╦╗
╠╬╣
╚╩╝<Esc>   " Cut the number (goes in @- register) and enter the "template"
h<C-v>kkx  " Move to the middle column, highlight and cut it
@-P        " Paste @- copies of the cut column
jyy        " Move to the middle line and copy it
@-p        " Paste @- copies of the copied line

Для підтвердження: Чи тільки перекладач TIO задихається від символів?
Кудлатий

@Shaggy Так, це видає помилку Python про Latin-1, а не помилку Vim. (Я використовував V-сторінку лише тому, що в TIO немає простої сторінки Vim, і я думаю, що V використовує латинську-1.) Vim на моїй машині не має жодних проблем із символами.
Йордан

5

GNU sed, 74 + 1 = 75 байт

+1 байт для -rпрапора Вводить введення як одинарне число.

s/1111(1*)/╔╦\1╗\n;\1╠╬\1╣\n╚╩\1╝/
:
s/(.)1/\1\1/
t
s/;([^;\n]+)/\1\n\1/
t

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

Пояснення

Це досить просто. Припустимо, вхід становить 6 (одинарний 111111). Перший рядок опускається чотири1 с і перетворює вхід, що залишився:

╔╦11╗
;11╠╬11╣
╚╩11╝

Третій рядок у циклі замінює кожен 1 символом, який передує йому. Це створює наші стовпці:

╔╦╦1╗
;11╠╬11╣
╚╩11╝

╔╦╦╦╗
;11╠╬11╣
╚╩11╝

...

╔╦╦╦╗
;;;╠╬╬╬╣
╚╩╩╩╝

Зауважте, що це також дублювало ;характер. Нарешті, п'ятий рядок у циклі замінює кожен ;символ копією рядка, який наступним чином:

╔╦╦╦╗
;;╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝

╔╦╦╦╗
;╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝

╔╦╦╦╗
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝

4

Желе , 33 байти

... це 33? - коштує 5 для перетворення з одного байтового літерального рядка (індекси кодової сторінки) в символи Unicode.

_2µ“€ðБẋ“¡Ø¤“©ßµ‘js3x€2¦€’+⁽"7ỌY

Повна програма, що друкує результат.

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

Як?

_2µ“€ðБẋ“¡Ø¤“©ßµ‘js3x€2¦€’+⁽"7ỌY - Main link: n
_2                                - subtract 2
  µ                               - start a new monadic chain with n-2 on the left
   “€ðБ                          - code page indexes [12, 24, 15] (middle row characters)
        ẋ                         - repeat n-2 times (make unexpanded middle rows)
         “¡Ø¤“©ßµ‘                - code page indexes [[0,18,3],[6,21,9]] (top & bottom)
                  j               - join (one list: top + middles + bottom)
                   s3             - split into threes (separate into the unexpanded rows)
                          ’       - decrement n-2 = n-3
                        ¦€        - sparsely apply to €ach:
                       2          -   at index 2
                     x€           -   repeat €ach (expand centre of every row to n-3 chars)
                            ⁽"7   - literal 9556
                           +      - addition (0->9556; 12->9568; etc...)
                               Ọ  - cast to characters (╠; ╔; etc...)
                                Y - join with newlines
                                  - implicit print

@Shaggy - Я використовую 9 байт, щоб представити символи всередині рядкових літералів - це індекси кодової сторінки. 5 байтів до Yкінця +⁽"7Ọ, додає до них 9556, а потім передає символів. Вони (5) безкоштовні? Я відчуваю, що це було б так само, як якщо б я міг використовувати символи Unicode безпосередньо. (Я можу також використовувати фактичні символи, а не індекси кодової сторінки та використовувати відображення для більшої кількості байтів).
Джонатан Аллан

Ні. Після обговорення було зроблено висновок про те, що тільки саму таблицю завжди можна зараховувати як 1, а не будь-яке інше представлення.
Ерік Аутгольфер


3

Діалог APL, 71 байт

{('╔',('╠'⍴⍨⍵-2),'╚'),((⍵-3)\⍪('╦',('╬'⍴⍨⍵-2),'╩')),'╗',('╣'⍴⍨⍵-2),'╝'}

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


Ви можете однозначно гольфувати це. Наприклад, ви завжди можете замінити (some expr)f Yїх Y f⍨ some expr.
Адам

@ Adám Я знаю, це зараз, я зараз не за комп'ютером
Uriel

3

Japt , 60 52 49 48 36 байт

"╔{Uµ3 ç'╦}╗{UÄ ç"
╠{ç'╬}╣"}
╚{ç'╩}╝

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

Інша версія (47 байт + -Rпрапор)

"8{Uµ3 ç'J};{UÄ ç"D{ç'P}G"}>{ç'M}A"c_+9500ÃòU+2

Потрібен -Rпрапор (додається до поля введення).Спробуйте в Інтернеті!

Як це працює?

Оскільки я спочатку припускав, що «символи дверей» коштують більше одного байта, я вважав, що зможу зберегти досить багато байтів, кодуючи їх. Потім я відняв 9500 з кодів символів, які залишили мені символи 8J; DPG >MA, які коштували всього один байт кожен. Тоді я міг би просто додати 9500 до кожного символьного коду, і все було б добре.

 "8{   Uµ 3 ç'J}  ;{   UÄ  ç"D{   ç'P}  G"}  >{   ç'M}  A"c_+9500Ã òU+2
 "8"+((U-=3 ç'J)+";"+((U+1 ç"D"+(Uç'P)+"G")+">"+(Uç'M)+"A"c_+9500} òU+2
 "8"+           +";"+                      +">"+      +"A"              # Take this string of characters
     ((U-=3 ç'J)                                                        # Repeat "J" input - 3 times
                     ((    ç              )                             # Repeat the string
                            "D"+(Uç'P)+"G"                              # "D" + input-3 times "P" + "G"
                       U+1                                              # Input - 2 times
                                                (Uç'M)                  # Repeat "M" input - 3 times
                                                          c_     }      # Take the character code of every character
                                                            +9500       # Add 9500 to it
                                                          c_     }      # And convert it back to a character
                                                                   òU+2 # Split this string on every (input)th character
                                                                        # Print the resulting array, joined with newlines.

О, так, ти маєш рацію.
Лука



2

Швидкий, 161 байт

let f:(String,Int)->String={String(repeating:$0,count:$1)};var p={i in print("╔\(f("╦",i-3))╗\n\(f("╠\(f("╬",i-3))╣\n",i-2))╚\(f("╩",i-3))╝")}

Без гольфу:

let f:(String,Int)->String = {
    String(repeating:$0,count:$1)
}
var p={ i in
    print("╔\(f("╦",i-3))╗\n\(f("╠\(f("╬",i-3))╣\n",i-2))╚\(f("╩",i-3))╝")
}

Ви можете спробувати цю відповідь тут


2

QBIC , 78 байт

[:-3|X=X+@╦`]?@╔`+X+@╗`[b-2|Y=Z[b-3|Y=Y+@╬`]?@╠`+Y+@╣`}[b-3|W=W+@╩`]?@╚`+W+@╝`

На щастя, всі символи, які використовуються у двері комірок, знаходяться на кодовій сторінці QBasic.

Пояснення

            The TOP
[:-3|       FOR a = 1 to n-3 (-1 for the width, -2 for beginning and end)
X=X+@╦`]    Build out X$ with the parts of the middle-top
?@╔`+X+@╗`  Then print that preceded and followed by the corners
┘           Syntactic linebreak

            The MIDDLE
[b-2|       FOR c = 1 to n-2 (all the middle rows)
Y=Z         Reset Y$ to ""
            Build up the middle rows in the same way as the top,
            just with different symbols and once for each middle row
[b-3|Y=Y+@╬`]?@╠`+Y+@╣`
}           Close the FOR loop
            The BOTTOM
            The same as the top, just with different symbols
[b-3|W=W+@╩`]?@╚`+W+@╝`

Вибірка зразка

Command line: 7

╔╦╦╦╦╗
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╚╩╩╩╩╝

1
+1 за використання мови, яка фактично містить їх як один байт, на кодовій сторінці за замовчуванням.
Джошуа

Чи можете ви додати TIO (або еквівалент)?
Кудлатий


1
О так! Я згадаю це врешті-решт, обіцяю! : D
Кудлатий

@Shaggy добре, не занадто звикаєш до ідеї. Я щойно знайшов працюючу Emscripten-збірку Dosbox під керуванням QBasic. Я спробую перенести це на QBIC в найближчому місяці, щоб веб-телебачення ще не прибуло ...
телебачення


2

JavaScript (ES6), 86 байт

Це значно довше, ніж інші відповіді JS , але я хотів спробувати спробувати альтернативний метод.

n=>(g=i=>--i?`╬╣╠╩╝╚╦╗╔
`[(j=i%n)?!--j+2*!(n-j-2)+3*(i<n)+6*(i>n*n-n):9]+g(i):'')(n*n)

Як?

Кожному краю сітки призначаємо вагу: 1 для правого, 2 для лівого, 3 для нижнього та 6 для верхнього. Сума ваг дає індекс символу, який потрібно використовувати.

8666667    0 1 2 3 4 5 6 7 8
2000001    ╬ ╣ ╠ ╩ ╝ ╚ ╦ ╗ ╔
2000001
2000001
2000001
2000001
2000001
5333334

Демо


2

JavaScript (ES6), 80 74 байт

n=>`╔${"╦"[a="repeat"](n-=3)}╗${`
╠${"╬"[a](n)}╣`[a](n+1)}
╚${"╩"[a](n)}╝`

Ви можете порахувати символи як один байт кожен, зробивши це 80 байт. І ви повинні мати можливість краще використовувати літерали шаблону, щоб зберегти кілька байт;)
Shaggy

Ви можете вважати символи лише одним байтом, якщо ви знайдете реалізацію ES6, яка буде приймати вхід CP437 в оригінальному режимі.
user5090812

@ user5090812, Це надбавка, специфічна для цього завдання.
Кудлатий

@ user5090812 Не потрібно знаходити цю реалізацію, оскільки правила виклику вказують " Для цілей цього виклику в мовах, де символи, використані для" дверей ", приймають кілька байтів, їх можна зараховувати до вашого рахунку як один байт кожен. "Таким чином, кількість байтів становить 80 байт замість 98 (якщо я правильно порахував).
Kevin Cruijssen

Ну, це погане правило. Це знімає всі стимули шукати кращий спосіб зберігання персонажів.
Лука

2

Рубі, 54 52 байти

-2 байти завдяки ymbirtt.

->n{?╔+?╦*(n-=3)+"╗
"+(?╠+?╬*n+"╣
")*-~n+?╚+?╩*n+?╝}

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

Безумовно

Це супер нудно:

->n{
   ?╔ + ?╦ * (n-=3) + "╗\n" + 
  (?╠ + ?╬ * n      + "╣\n") * -~n + 
   ?╚ + ?╩ * n      + ?╝
}

Ви можете (n+1)трохи скоротити , написавши -~n- пріоритет оператора також заощадить вам дужки.
ymbirtt

2

Java 8, 102 + 101 байт

java.util.function.BiFunction<String,Integer,String>r=(c,n)->"".valueOf(new char[n]).replace("\0",c);

n->{n-=3;return "╔"+r.apply("╦",n)+"╗\n"+r.apply('╠'+r.apply("╬",n)+"╣\n",-~n)+"╚"+r.apply("╩",n)+"╝";}

Це ще один струнний повторювач тієї ж довжини:

java.util.function.BiFunction<String,Integer,String>r=(c,n)->{String p=c;for(;--n>0;p+=c);return p;}

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


Непогано, ви можете зробити свій підхід ще нижчим, ніж моя відповідь. Перш за все, ви можете опустити його до 78 + 72 байт (всього 150), використовуючи метод Java 7 замість BiFunction: n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}і String r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);} спробуйте його в Інтернеті. А другий метод також можна змінити на String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}(63 байти), тому він стає загалом 141 байт
Кевін Круїссен

Виправлення, ви навіть можете знизити його до 130 байт : n->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"і String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;} спробуйте в Інтернеті.
Кевін Кройсейсен

2

C # (.NET Core) , оцінка 123 (141 байт) оцінка 118 (136 байт)

n=>{string a="╔",b="╠",c="╚";for(int i=3;i++<n;a+="╦",b+="╬")c+="╩";a+="╗\n";for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}

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

-5 байт завдяки @KevinCruijssen

Пояснення:

n => 
{
    string a = "╔", b = "╠", c = "╚"; //Initialize the first, last and the middle lines with the starting character.
    for (int i = 3; i++ < n;          //Loop n-3 times
        a += "╦", b += "╬")           //Add the middle character to the first and middle line.
        c += "╩";                     //Add the middle character to the last line.
    a += "╗\n";                       //Add the end character to the first line.
    for (b += "╣\n";                  //Add the end character to the first line.
        n-- > 2;)                     //Loop n-2 times.
        a += b;                       //Add the middle line to the first line.
    return a + c + "╝";               //Add the last line and the final character and return.
}

1
Приємна відповідь, +1 від мене. Я знаю , що це було деякий час, але ви можете гольф 5 ще байт шляхом зміни b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};в for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";} Спробувати онлайн.
Кевін Круїссен

@KevinCruijssen: Дякую
raznagul

2

Стакс , 23 байти

÷ÅoB↔╒╢Fm|╦a⌐á5µ┐»♫÷d╕Ñ

Запустіть і налагодіть його

Ось версія, що не має волі. Забавно, що для Stax насправді менше не використовувати буквальні символи, тому що включення їх як літералу запобіжить упаковці джерела.

"2Pfj_EQGG]T"!  packed representation of the 9 characters
3/              split into groups of 3
GG              call into trailing program twice
m               print each row
}               trailing program begins here
1|xv\           [1, --x - 1]; x starts as original input
:B              repeat each element corresponding number of times
                effectively, this repeats the internal row of the matrix
M               transpose door; this way it expands the two dimensions

Виконати цей


1

Mathematica, 106 bytes

(T[a_,b_,c_]:=a<>Table[b,#-3]<>c;w=Column;w[{T["╔","╦","╗"],w@Table[T["╠","╬","╣"],#-2],T["╚","╩","╝"]}])&

Could you add a TIO (or equivalent)?
Shaggy

1
goto sandbox.open.wolframcloud.com/app/objects paste the code(ctrl+v), add [8] at the end and press shift+enter
J42161217

There appears to be an extra line break between each line, would I be right in saying that's a problem with the rendering of the outpu, rather than the output itself?
Shaggy

@Shaggy wolfram cloud displays all characters in a funny-distorted way so it is not the best way to present such tasks.there are no extra lines and everything looks ok on mathematica. copy and paste your test case to check.I did and they look identical
J42161217

1

oK, 38 chars

`0:"╔╠╚╦╬╩╗╣╝"{+x+/:3*0,2_x}@&1,|1,-2+

Try it online.

k does not seem to want to handle unicode well, so I went with oK.


1

Batch, 126 bytes

@set s=
@for /l %%i in (4,1,%1)do @call set s=%%s%%Î
@echo É%s:Î=Ë%»
@for /l %%i in (3,1,%1)do @echo Ì%s%¹
@echo È%s:Î=Ê%¼

Works in CP437 or CP850. Looks like this in those code pages:

@set s=
@for /l %%i in (4,1,%1)do @call set s=%%s%%╬
@echo ╔%s:╬=╦%╗
@for /l %%i in (3,1,%1)do @echo ╠%s%╣
@echo ╚%s:╬=╩%╝

1

Retina, 56 50 bytes

.+
$*╬╣
^╬╬╬
╠
.?
$_¶
T`╠╬╣`╔╦╗`^.*
T`╠╬╣`╚╩╝`.*¶$

Try it online! Works by building up a square of ╬s and then fixing up the edges (in particular three colums are deleted when the sides are added).


1

PowerShell, 67 bytes

'╔'+'╦'*($x=$args[0]-3)+'╗';,('╠'+'╬'*$x+'╣')*($x+1);'╚'+'╩'*$x+'╝'

Takes input $args[0], subtracts 3, saves that into $x, uses that in the construction of the top of the door to output the appropriate number of middle sections. Then we're outputting the middle rows, of which we have $x+1 of. Finally, the bottom row is similar to the top row. All of those are left on the pipeline, and the implicit Write-Output inserts a newline between elements for free.

Try it online!


1

Perl 5, 61

60 characters of code (90 including the multibyte door characters) + 1 for -p

$_='╔'.'╦'x($n=$_-3)."╗\n";$_.=y/╔╦╗/╠╬╣/r x++$n.y/╔╦╗/╚╩╝/r

Try it online!



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