Di Jailhouse Sekarang

18

Tantangan

Diberikan bilangan bulat n(di mana 4<=n<=10**6) sebagai input membuat "pintu penjara" seni ASCII * mengukur n-1karakter lebar dan nkarakter tinggi, menggunakan simbol dari contoh di bawah ini.


Contoh

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

Karakter yang digunakan adalah sebagai berikut:

┌───────────────┬─────────┬───────┐
│ 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  │
└───────────────┴─────────┴───────┘

Aturan

  • Anda dapat mengambil input dengan cara yang masuk akal dan nyaman selama diizinkan oleh aturan I / O standar .
  • Untuk keperluan tantangan ini, dalam bahasa di mana simbol yang digunakan untuk membangun "pintu" adalah karakter multi-byte, mereka dapat dihitung terhadap skor Anda masing-masing sebagai byte tunggal.
  • Semua karakter lain (satu atau multi-byte) harus dihitung sebagai normal.
  • Keluaran mungkin tidak mengandung spasi tambahan apa pun, tetapi garis tambahan tertinggal diizinkan jika benar-benar diperlukan.
  • Ini adalah sehingga jumlah byte terendah menang.

Uji Kasus

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

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

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

* Ya, saya sadar bahwa semakin besar semakin tidak terlihat seperti pintu penjara! : D

Shaggy
sumber
4
Ini akan lebih baik jika Anda dapat memasukkan dimensi x dan y
Beta Decay
15
Itu ada di Sandbox lebih dari cukup bagi Anda untuk menyarankan itu.
Shaggy
Bisakah program saya memuat bahkan melalui tidak ada dalam codepage-nya? Jika tidak, maka "'Z“ζdiizinkan sebagai biaya satu byte (atau 2)? (tekan 9580, konversi ke unicode)?
dzaima
@ Dzaima Untuk keperluan tantangan ini, dalam bahasa di mana simbol yang digunakan untuk "pintu" mengambil beberapa byte, mereka dapat dihitung terhadap skor Anda masing-masing sebagai byte tunggal.
Okx
@Okx `╬` - tidak dapat diwakili dalam jumlah byte apa pun, "'Z“ζsama dengan satu byte akan seperti di javascript "╬"seharga 1 byte
dzaima

Jawaban:

9

Java 8, 156 151 148 118 byte

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 byte dengan membuat port jawaban @raznagul C # (.NET Core) , setelah saya bermain golf 5 byte.

Cobalah online.

Jawaban lama 148 byte:

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 byte terima kasih kepada @raznagul .

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber
Bisakah Anda menyimpan byte dengan kode escape / char alih-alih hardcoding?
TheLethalCoder
@TheLethalCoder Mungkin, tetapi karena negara aturan tantangan kita dapat menghitung simbol sebagai masing-masing 1 byte, itu mungkin lebih pendek seperti ini (maka hitungan 156 byte bukan 176 yang sebenarnya). Tapi jangan ragu untuk mencoba beberapa hal untuk membuatnya lebih pendek dengan kode char.
Kevin Cruijssen
Ah saya melewatkan bagian peraturan itu.
TheLethalCoder
2
+1 untuk -->operator to ( ).
raznagul
1
Jika Anda menggunakan i-->3,i-->2 dan j-->3´ you can save 5 bytes by removing the n- = 3` dan n+1.
raznagul
7

Arang , 34 - 5 = 29 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Pengurangan 5 byte untuk karakter menggambar kotak.

ReflectOverlapOverlap(0)harus setara dengan ReflectMirror()tetapi sebaliknya Arang hanya melakukan ReflectTransform()sebaliknya, jika tidak solusi ini juga akan berhasil n=3. Berikut adalah solusi yang menunjukkan apa yang akan terjadi n=3untuk 38 - 5 = 33 byte:

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

Lebih baik lagi, jika ReflectOverlapOverlap(0)berhasil, tapi saya tidak repot mendukung n=3, maka saya bisa melakukan ini selama 31 - 4 = 27 byte:

A⁻N³γUB╬↓×╠γ╚×╩γ‖BOγ‖BO↑⁻γ¹
Neil
sumber
1
Hmm, tidak tahu Charcoal juga mencerminkan / mirror to dan semacamnya. " Penghitung byte Charcoal tidak berfungsi karena suatu alasan. " Mungkin byte-counter Charcoal tidak berfungsi karena karakter-karakter itu bukan bagian dari halaman kode-nya? Anda dapat menghitungnya masing-masing 1 byte sesuai dengan aturan tantangan, jadi ini memang 27.
Kevin Cruijssen
@KevinCruijssen Tergantung pada operator yang Anda gunakan. (Saya harus kembali dan memeriksa ulang setiap kali; ada beberapa dari mereka dan itu membingungkan ...)
Neil
@Neil Ups, itu bug, akan memperbaiki ASAP. Terima kasih telah menemukannya!
ASCII
@Neil Juga untuk beberapa alasan itu rusak ketika n = 4
ASCII-satunya
6

Haskell, 75 byte

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

Cobalah online!

Fungsi wmengambil bilangan bulat idan daftar di mana aelemen pertama, belemen kedua dan csisanya dari daftar dan membuat daftar baru a, diikuti oleh i-3salinan b, diikuti oleh c. Terapkan wpertama pada setiap elemen daftar ["╔╦╗\n","╠╬╣\n","╚╩╝"]dan kemudian lagi (dengan ipeningkatan oleh 1) pada daftar yang dihasilkan. Bergabung menjadi satu daftar.

nimi
sumber
Apa yang dimaksud dengan <$ operator? Apakah hanya >> dengan argumen terbalik?
Aneesh Durg
@AneeshDurg: <$berasal dari Data.Functordan telah dimasukkan ke dalam Prelude. Hampir sama dengan >>. a <$ bmenggantikan setiap elemen bdengan a, sedangkan b >> adiharapkan amenjadi daftar dan menyatukan panjang bsalinan a. [1,2] >> "aa"-> "aaaa", "aa" <$ [1,2]-> ["aa","aa"]. Catatan: 'x' <$ [1,2]sama dengan [1,2] >> "x".
nimi
5

Vim, 29 byte

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

Karena ada karakter kontrol, inilah dump 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

Cobalah online! (Penerjemah V tampaknya memiliki masalah dengan karakter eksotis, sehingga tautan menggunakan yang lebih biasa.)

Penjelasan

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
Yordania
sumber
Untuk mengkonfirmasi: Apakah hanya penerjemah TIO yang tersedak oleh simbol?
Shaggy
@Shaggy Ya, itu melempar kesalahan Python tentang Latin-1, bukan kesalahan Vim. (Saya menggunakan halaman V hanya karena TIO tidak memiliki halaman Vim biasa, dan saya pikir V menggunakan bahasa Latin-1.) Vim di mesin saya tidak memiliki masalah dengan karakter.
Jordan
5

GNU sed, 74 + 1 = 75 byte

+1 byte untuk -rbendera. Mengambil input sebagai nomor unary.

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

Cobalah online!

Penjelasan

Ini sangat sederhana. Misalkan inputnya adalah 6 (unary 111111). Baris pertama turun empat 1s dan mengubah input yang tersisa menjadi ini:

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

Baris ketiga, dalam satu lingkaran, menggantikan setiap 1karakter dengan sebelumnya. Ini menciptakan kolom kami:

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

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

...

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

Perhatikan bahwa ini juga telah menggandakan ;karakter. Akhirnya, baris kelima, dalam satu lingkaran, menggantikan setiap ;karakter dengan salinan baris berikut:

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

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

╔╦╦╦╗
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝
Yordania
sumber
4

Jelly , 33 byte

... apakah 33? - biayanya 5 untuk mengkonversi dari liter string satu byte (indeks halaman kode) ke karakter Unicode.

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

Program lengkap mencetak hasilnya.

Cobalah online!

Bagaimana?

_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
Jonathan Allan
sumber
@Shaggy - Saya menggunakan 9 byte untuk mewakili karakter di dalam string literal - ini adalah indeks halaman kode. 5 byte sebelum Ydi akhir +⁽"7Ọ,, menambahkan 9556 untuk ini dan kemudian dilemparkan ke karakter. Apakah mereka (5) bebas? Saya merasa itu akan sama seperti jika saya dapat menggunakan karakter Unicode secara langsung. (Saya juga bisa menggunakan karakter aktual daripada indeks halaman kode dan menggunakan pemetaan untuk lebih banyak byte).
Jonathan Allan
Nggak. Setelah diskusi, disimpulkan bahwa hanya char sendiri yang selalu dapat dihitung sebagai 1, bukan representasi lainnya.
Erik the Outgolfer
3

Python 3 , 75 byte

n=int(input())-3
print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*-~n+"╚"+"╩"*n+"╝")

Cobalah online!

Biarawati Bocor
sumber
Anda dapat bermain golf sedikit dengan mulai di n-3:n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
Kevin Cruijssen
Juga, n+1setara dengan -~n.
Leaky Nun
3

Dyalog APL, 71 byte

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

Cobalah online!

Uriel
sumber
Anda pasti bisa bermain golf ini. Misalnya, Anda selalu bisa mengganti (some expr)f Ydengan Y f⍨ some expr.
Adám
@ Adám saya tahu, ini sedang berlangsung, saya tidak di komputer saat ini
Uriel
3

Japt , 60 52 49 48 36 byte

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

Cobalah online!

Versi lain (47 byte + -Rbendera)

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

Membutuhkan -Rflag (ditambahkan ke bidang input). Cobalah online!

Bagaimana cara kerjanya?

Karena saya awalnya mengasumsikan 'karakter pintu' harganya lebih dari satu byte, saya pikir saya bisa menghemat beberapa byte dengan mengkodekannya. Kemudian, saya mengurangi 9500 dari kode karakter, yang membuat saya dengan karakter 8J; DPG >MA, yang hanya biaya satu byte. Lalu, saya bisa menambahkan 9500 ke setiap kode karakter, dan semuanya akan baik-baik saja.

 "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.
Luke
sumber
Oh, ya, kamu benar.
Luke
32 byte
Shaggy
2

Swift, 161 byte

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))╝")}

Tidak golf:

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))╝")
}

Anda dapat mencoba jawaban ini di sini

Caleb Kleveter
sumber
2

QBIC , 78 byte

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

Untungnya, semua simbol yang digunakan di luar sel ada di QBasic codepage.

Penjelasan

            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+@╝`

Output Sampel

Command line: 7

╔╦╦╦╦╗
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╚╩╩╩╩╝
steenbergh
sumber
1
+1 untuk menggunakan bahasa yang sebenarnya menjadikannya sebagai karakter satu byte di halaman kode defaultnya.
Joshua
Bisakah Anda menambahkan TIO (atau yang setara)?
Shaggy
1
Oh ya! Saya akan ingat bahwa pada akhirnya, saya berjanji! : D
Shaggy
@ Shaggy, jangan terlalu terbiasa dengan ide itu. Saya baru saja menemukan Emscripten-build yang berfungsi menjalankan Dosbox menjalankan QBasic. Saya akan mencoba mengarahkannya ke QBIC di bulan mendatang, jadi web env mungkin belum tiba ...
steenbergh
2

PHP , 131 byte, 113 karakter

for($z=str_split("╔╠╚╦╬╩╗╣╝",3);$i<$a=$argn;)echo str_pad($z[$b=$i++?$i<$a?1:2:0],3*$a-3,$z[$b+3]),$z[$b+6],"\n";

Cobalah online!

PHP , 133 byte, 115 karakter

for(;$i<$a=$argn;)echo str_pad(["╔","╠","╚"][$b=$i++?$i<$a?1:2:0],3*$a-3,["╦","╬","╩"][$b]),["╗","╣","╝"][$b],"\n";

Cobalah online!

Jörg Hülsermann
sumber
2

JavaScript (ES6), 86 byte

Ini jauh lebih lama daripada jawaban JS lainnya , tetapi saya ingin mencobanya dengan metode alternatif.

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)

Bagaimana?

Kami menetapkan bobot untuk setiap tepi kisi: 1 untuk kanan, 2 untuk kiri, 3 untuk bawah dan 6 untuk atas. Jumlah bobot memberikan indeks karakter untuk digunakan.

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

Demo

Arnauld
sumber
2

JavaScript (ES6), 80 74 byte

n=>`╔${"╦"[a="repeat"](n-=3)}╗${`
╠${"╬"[a](n)}╣`[a](n+1)}
╚${"╩"[a](n)}╝`
Luke
sumber
Anda dapat menghitung simbol sebagai masing-masing satu byte, menghasilkan 80 byte. Dan Anda harus dapat memanfaatkan literal templat dengan lebih baik untuk menghemat beberapa byte;)
Shaggy
Anda hanya dapat menghitung simbol sebagai satu byte jika Anda dapat menemukan implementasi ES6 yang akan mengambil input CP437 secara asli.
user5090812
@ user5090812, Ini tunjangan khusus untuk tantangan ini.
Shaggy
@ user5090812 Tidak perlu menemukan implementasi itu, karena aturan tantangan menyatakan " Untuk keperluan tantangan ini, dalam bahasa di mana simbol yang digunakan untuk" pintu "mengambil beberapa byte, mereka dapat dihitung terhadap skor Anda sebagai masing-masing byte tunggal. "Jadi ini memiliki jumlah byte 80 byte, bukan 98 (jika saya menghitung dengan benar).
Kevin Cruijssen
Ya, itu aturan yang buruk. Ini menghilangkan semua insentif untuk mencari cara yang lebih baik untuk menyimpan karakter.
Luke
2

Rubi, 54 52 byte

-2 byte terima kasih kepada ymbirtt.

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

Cobalah online!

Tidak disatukan

Ini sangat membosankan:

->n{
   ?╔ + ?╦ * (n-=3) + "╗\n" + 
  (?╠ + ?╬ * n      + "╣\n") * -~n + 
   ?╚ + ?╩ * n      + ?╝
}
Yordania
sumber
Anda dapat mempersingkat (n+1)sedikit dengan menulis -~n- prioritas operator akan menghemat kurung juga.
ymbirtt
2

Java 8, 102 + 101 byte

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)+"╝";}

Ini adalah pengulang senar lain dengan panjang yang sama:

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

Cobalah online!

Roberto Graham
sumber
Not bad, you can make your approach even lower than my answer. First of all you can lower it to 78 + 72 bytes (150 in total) by using a Java 7 method instead of the BiFunction: n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";} and String r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);} Try it online. And the second method can also be changed to String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;} (63 bytes), so it becomes 141 bytes in total
Kevin Cruijssen
Correction, you can even lower it to 130 bytes: n->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝" and String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;} Try it online.
Kevin Cruijssen
2

C# (.NET Core), Score 123 (141 bytes) Score 118 (136 bytes)

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+"╝";}

Try it online!

-5 bytes thanks to @KevinCruijssen

Explanation:

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.
}
raznagul
sumber
1
Nice answer, +1 from me. I know it's been a while, but you can golf 5 more bytes by changing b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;}; to for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";} Try it online.
Kevin Cruijssen
@KevinCruijssen: Thank you.
raznagul
2

Stax, 23 bytes

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

Run and debug it

Here's the ungolfed version. Amusingly, it's actually smaller for stax not to use the literal characters because including them as a literal would prevent source packing.

"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

Run this one

recursive
sumber
1

Mathematica, 106 bytes

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

zgrep
sumber
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:╬=╩%╝
Neil
sumber
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).

Neil
sumber
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!

AdmBorkBork
sumber
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!

Xcali
sumber