Trong nhà tù bây giờ


18

Thử thách

Đưa ra một số nguyên n(trong đó 4<=n<=10**6) làm đầu vào tạo ra một "cửa tù" nghệ thuật ASCII * đo các n-1ký tự rộng và nký tự cao, sử dụng các ký hiệu từ ví dụ bên dưới.


Thí dụ

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

Các ký tự được sử dụng như sau:

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

Quy tắc

  • Bạn có thể nhận đầu vào bằng bất kỳ phương tiện hợp lý, thuận tiện nào miễn là được phép theo quy tắc I / O tiêu chuẩn .
  • Đối với mục đích của thử thách này, trong các ngôn ngữ mà các ký hiệu được sử dụng để xây dựng "cánh cửa" là các ký tự nhiều byte, chúng có thể được tính vào điểm số của bạn dưới dạng một byte.
  • Tất cả các ký tự khác (một hoặc nhiều byte) phải được tính là bình thường.
  • Đầu ra có thể không chứa bất kỳ dấu cách nào nhưng một dòng mới được phép nếu thực sự cần thiết.
  • Đây là nên số byte thấp nhất sẽ thắng.

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

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

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

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

* Vâng, tôi biết rằng càng lớn, nó càng trông giống như một cánh cửa nhà tù! : D


4
Điều này sẽ rất tốt nếu bạn có thể nhập cả hai kích thước x và y
Beta Decay

15
Đó là trong Sandbox quá lâu để bạn đề xuất điều đó.
Xù xì

Chương trình của tôi có thể chứa máng thậm chí không có trong codepage của nó không? Nếu không, thì được "'Z“ζphép dưới dạng một byte chi phí (hoặc 2)? (đẩy 9580, chuyển đổi sang unicode)?
dzaima

@dzaima Với mục đích của thử thách này, trong các ngôn ngữ mà các ký hiệu được sử dụng cho "cửa" lấy nhiều byte, chúng có thể được tính vào điểm số của bạn dưới dạng một byte.
Okx

@Okx `` - không thể lặp lại ở bất kỳ số lượng byte nào, "'Z“ζbằng một byte sẽ giống như trong javascript "╬"có giá 1 byte
dzaima

Câu trả lời:


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 bằng cách tạo một cổng của @raznagul câu trả lời C # (.NET Core) , sau khi tôi đánh gôn 5 byte.

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

Câu trả lời cũ 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 nhờ @raznagul .

Giải trình:

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

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

Bạn có thể lưu bất kỳ byte nào bằng mã thoát / char thay vì mã hóa chúng không?
TheLethalCoder

@TheLethalCoder Có lẽ, nhưng vì trạng thái quy tắc thử thách, chúng ta có thể đếm các ký hiệu là 1 byte mỗi ký tự, có lẽ nó ngắn hơn như thế này (do đó đếm được 156 byte thay vì 176 thực tế). Nhưng hãy thoải mái thử một số thứ để làm cho nó ngắn hơn với mã char.
Kevin Cruijssen

Ah tôi đã bỏ lỡ một phần của các quy tắc.
TheLethalCoder

2
+1 cho -->toán tử đi đến ( ).
raznagul

1
Nếu bạn sử dụng i-->3, i-->2j-->3´ you can save 5 bytes by removing the n- = 3` và n+1.
raznagul

7

Than , 34 - 5 = 29 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giảm 5 byte là dành cho các ký tự vẽ hộp.

ReflectOverlapOverlap(0)nên tương đương với ReflectMirror()nhưng thay vào đó Char than chỉ thực hiện ReflectTransform()thay thế, nếu không thì giải pháp này cũng sẽ hiệu quả n=3. Đây là một cách giải quyết cho thấy điều gì sẽ xảy ra n=3với 38 - 5 = 33 byte:

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

Vẫn tốt hơn, nếu ReflectOverlapOverlap(0)làm việc, nhưng tôi không bận tâm hỗ trợ n=3, thì tôi có thể làm điều này trong 31 - 4 = 27 byte:

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

1
Hmm, không biết than cũng phản ánh / gương để và như vậy. " Bộ đếm byte của Char than không hoạt động vì một số lý do. " Có lẽ bộ đếm byte của Char than không hoạt động vì những ký tự đó không phải là một phần của trang mã của nó? Tuy nhiên, bạn có thể đếm chúng là 1 byte theo quy tắc thử thách, vì vậy đây thực sự là 27.
Kevin Cruijssen

@KevinCruijssen Nó phụ thuộc vào nhà điều hành bạn sử dụng. (Tôi phải quay lại và kiểm tra lại mỗi lần; có một số trong số họ và điều đó gây nhầm lẫn ...)
Neil

@Neil Rất tiếc, đó là một lỗi, sẽ sửa ASAP. Cảm ơn vì đã tìm thấy nó!
ASCII - chỉ

@Neil Cũng vì một số lý do, nó bị hỏng khi n = 4
ASCII - chỉ



6

Haskell, 75 byte

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

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

Hàm wlấy một số nguyên ivà một danh sách trong đó alà phần tử đầu tiên, bphần tử thứ hai và cphần còn lại của danh sách và tạo một danh sách mới a, theo sau là các i-3bản sao của b, theo sau là c. Áp dụng wđầu tiên trên mỗi yếu tố của danh sách ["╔╦╗\n","╠╬╣\n","╚╩╝"]và sau đó một lần nữa (với imức tăng thêm 1) trong danh sách kết quả. Liên kết thành một danh sách duy nhất.


Toán tử <$ là gì? Có phải chỉ là >> với các đối số lật?
Aneesh Durg

@AneeshDurg: <$ban đầu từ Data.Functorvà đã được đưa vào Prelude. Nó gần giống như >>. a <$ bthay thế tất cả các phần tử trong bvới a, trong khi b >> ahy vọng atrở thành một danh sách và concatenates chiều dài của bbản sao a. [1,2] >> "aa"-> "aaaa", "aa" <$ [1,2]-> ["aa","aa"]. Lưu ý: 'x' <$ [1,2]bằng [1,2] >> "x".
nimi

5

Vim, 29 byte

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

Vì có các ký tự điều khiển, đây là một kết xuất 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

Hãy thử trực tuyến!(Trình thông dịch V dường như có vấn đề với các ký tự kỳ lạ, do đó liên kết sử dụng các ký tự trần tục hơn.)

Giải trình

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

Để xác nhận: Có phải chỉ có trình thông dịch TIO gây nghẹt thở cho các ký hiệu?
Xù xì

@Shaggy Vâng, nó đưa ra lỗi Python về Latin-1, không phải lỗi Vim. (Tôi đã sử dụng trang V chỉ vì TIO không có trang Vim đơn giản và tôi nghĩ V sử dụng tiếng Latin-1.) Vim trên máy của tôi không có vấn đề gì với các ký tự.
Jordan

5

GNU sed, 74 + 1 = 75 byte

+1 byte cho -rcờ. Lấy đầu vào là một số unary.

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

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

Giải trình

Điều này khá đơn giản. Giả sử đầu vào là 6 (unary 111111). Dòng đầu tiên giảm bốn 1s và biến đổi đầu vào còn lại thành này:

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

Dòng thứ ba, trong một vòng lặp, thay thế mọi 1ký tự đứng trước nó. Điều này tạo ra các cột của chúng tôi:

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

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

...

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

Lưu ý rằng điều này cũng đã nhân đôi ;nhân vật. Cuối cùng, dòng thứ năm, trong một vòng lặp, thay thế mọi ;ký tự bằng một bản sao của dòng sau:

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

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

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

4

Thạch , 33 byte

... có phải là 33 không? - chi phí 5 để chuyển đổi từ một chuỗi ký tự byte (chỉ mục trang mã) sang các ký tự Unicode.

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

Một chương trình đầy đủ in kết quả.

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

Làm sao?

_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 - Tôi đang sử dụng 9 byte để thể hiện các ký tự bên trong chuỗi ký tự - đây là các chỉ mục trang mã. 5 byte trước khi Ykết thúc +⁽"7Ọ, thêm 9556 vào các ký tự này và sau đó chuyển thành ký tự. Họ (5) có miễn phí không? Tôi cảm thấy như thế sẽ giống như tôi có thể sử dụng trực tiếp các ký tự Unicode. (Tôi cũng có thể sử dụng các ký tự thực tế thay vì chỉ mục trang mã và sử dụng ánh xạ cho nhiều byte hơn).
Jonathan Allan

Không. Sau khi thảo luận, kết luận rằng chỉ có bản thân char luôn có thể được tính là 1, không phải bất kỳ đại diện nào khác.
Erik the Outgolfer


3

APL Dyalog, 71 byte

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

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


Bạn chắc chắn có thể chơi golf này. Ví dụ: Bạn luôn có thể thay thế (some expr)f Ybằng Y f⍨ some expr.
Adám

@ Adám Tôi biết, hiện đang diễn ra, hiện tại tôi không có máy tính
Uriel

3

Japt , 60 52 49 48 36 byte

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

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

Phiên bản khác (47 byte + -Rcờ)

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

Cần -R cờ (thêm vào trường đầu vào). Hãy thử trực tuyến!

Làm thế nào nó hoạt động?

Bởi vì ban đầu tôi giả sử các 'ký tự cửa' có giá hơn một byte, nên tôi nghĩ rằng tôi có thể tiết kiệm được một vài byte bằng cách mã hóa chúng. Sau đó, tôi đã trừ 9500 từ các mã ký tự, để lại cho tôi các ký tự 8J; DPG >MA, chỉ tốn một byte cho mỗi ký tự. Sau đó, tôi chỉ có thể thêm 9500 vào mỗi mã ký tự, và tất cả sẽ ổn.

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

Ồ, vâng, bạn đúng.
Lu-ca



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

Chưa chơi gôn:

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

Bạn có thể thử câu trả lời này ở đây


2

QBIC , 78 byte

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

May mắn thay, tất cả các biểu tượng được sử dụng trong cửa ô đều nằm trên bảng mã QBasic.

Giải trình

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

Đầu ra mẫu

Command line: 7

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

1
+1 để sử dụng ngôn ngữ thực sự có chúng dưới dạng ký tự một byte trong trang mã mặc định của nó.
Joshua

Bạn có thể thêm một TIO (hoặc tương đương) không?
Xù xì

@Shaggy codegolf.stackexchange.com/questions/125237/ cường
steenbergh

1
Ồ, vâng! Cuối cùng tôi sẽ nhớ điều đó, tôi hứa! : D
Shaggy

@Shaggy tốt, đừng quá quen với ý tưởng. Tôi vừa tìm thấy một bản dựng Emscripten-xây dựng của Dosbox chạy QBasic. Tôi sẽ cố gắng hướng tới QBIC trong tháng tới, vì vậy một web env có thể sẽ đến ...
steenbergh


2

JavaScript (ES6), 86 byte

Điều này dài hơn đáng kể so với câu trả lời JS khác , nhưng tôi muốn thử lại bằng một phương pháp thay thế.

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)

Làm sao?

Chúng tôi gán trọng số cho mỗi cạnh của lưới: 1 cho bên phải, 2 cho bên trái, 3 cho dưới cùng và 6 cho trên cùng. Tổng trọng số cho chỉ số của nhân vật sử dụng.

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

Bản giới thiệu


2

JavaScript (ES6), 80 74 byte

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

Bạn có thể đếm các ký hiệu là một byte mỗi cái, tạo ra 80 byte này. Và bạn sẽ có thể sử dụng tốt hơn các chữ mẫu để tiết kiệm một vài byte;)
Shaggy

Bạn chỉ có thể đếm các ký hiệu là một byte nếu bạn có thể tìm thấy triển khai ES6 sẽ nhận đầu vào CP437.
dùng5090812

@ user5090812, Đây là khoản trợ cấp dành riêng cho thử thách này.
Xù xì

@ user5090812 Không cần tìm cách triển khai đó, bởi vì quy tắc thách thức nêu rõ " Đối với mục đích của thử thách này, trong các ngôn ngữ mà các ký hiệu được sử dụng cho" cửa "lấy nhiều byte, chúng có thể được tính vào điểm số của bạn dưới dạng một byte. "Vì vậy, cái này có số byte là 80 byte thay vì 98 (nếu tôi đếm đúng).
Kevin Cruijssen

Vâng, đó là một quy tắc xấu. Nó loại bỏ tất cả các động cơ để tìm kiếm một cách tốt hơn để lưu trữ các nhân vật.
Luke

2

Ruby, 54 52 byte

-2 byte nhờ vào ymbirtt.

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

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

Ung dung

Điều này là siêu nhàm chán:

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

Bạn có thể rút ngắn (n+1)một chút bằng cách viết -~n- ưu tiên toán tử cũng sẽ giúp bạn tiết kiệm dấu ngoặc.
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)+"╝";}

Đây là một bộ lặp chuỗi khác có cùng độ dài:

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

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


Không tệ, bạn có thể làm cho cách tiếp cận của bạn thậm chí thấp hơn câu trả lời của tôi. Trước hết, bạn có thể hạ thấp nó xuống 78 + 72 byte (tổng cộng 150) bằng cách sử dụng phương thức Java 7 thay vì 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);} Thử trực tuyến. Và phương thức thứ hai cũng có thể được thay đổi thành String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}(63 byte), do đó tổng cộng trở thành 141 byte
Kevin Cruijssen

Sửa lỗi, bạn thậm chí có thể hạ nó xuống 130 byte : 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;} thử trực tuyến.
Kevin Cruijssen

2

C # (.NET Core) , Điểm 123 (141 byte) Điểm 118 (136 byte)

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

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

-5 byte nhờ @KevinCruijssen

Giải trình:

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
Câu trả lời hay, +1 từ tôi. Tôi biết đã được một lúc, nhưng bạn có thể chơi thêm 5 byte bằng cách thay đổi b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};thành for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";} Dùng thử trực tuyến.
Kevin Cruijssen 14/03/18

@KevinCruijssen: Cảm ơn bạn.
raznagul

2

Stax , 23 byte

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

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

Đây là phiên bản vô văn hóa. Thật thú vị, nó thực sự nhỏ hơn khi không sử dụng các ký tự theo nghĩa đen bởi vì bao gồm chúng như một nghĩa đen sẽ ngăn chặn việc đóng gói nguồn.

"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

Chạy cái này


1

Toán học, 106 byte

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

Bạn có thể thêm một TIO (hoặc tương đương)?
Xù xì

1
goto sandbox.open.wolframcloud.com/app/objects dán mã (ctrl + v), thêm [8] vào cuối và nhấn shift + enter
J42161217

Dường như có một ngắt dòng bổ sung giữa mỗi dòng, tôi có đúng không khi nói rằng đó là một vấn đề với kết xuất của outpu, chứ không phải là đầu ra?
Xù xì

Đám mây wolfram @Shaggy hiển thị tất cả các ký tự theo cách bị bóp méo vui nhộn, vì vậy đây không phải là cách tốt nhất để trình bày các tác vụ như vậy. Không có dòng nào thêm và mọi thứ đều ổn trên toán học. sao chép và dán trường hợp thử nghiệm của bạn để kiểm tra. Tôi đã làm và chúng trông giống hệt nhau
J42161217

1

oK, 38 ký tự

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

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

k dường như không muốn xử lý unicode tốt, vì vậy tôi đã đi với oK.


1

Mẻ, 126 byte

@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:Î=Ê%¼

Hoạt động trong CP437 hoặc CP850. Có vẻ như điều này trong các trang mã:

@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

Võng mạc , 56 50 byte

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

Hãy thử trực tuyến! Hoạt động bằng cách xây dựng một hình vuông s và sau đó sửa chữa các cạnh (đặc biệt là ba colums bị xóa khi các cạnh được thêm vào).


1

PowerShell , 67 byte

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

Đưa đầu vào $args[0], trừ 3, lưu nó vào $x, sử dụng nó trong việc xây dựng đỉnh cửa để xuất ra số phần giữa thích hợp. Sau đó, chúng tôi xuất ra các hàng giữa, trong đó chúng tôi có $x+1. Cuối cùng, hàng dưới cùng tương tự như hàng trên cùng. Tất cả những thứ đó được để lại trên đường ống và ẩnWrite-Output sẽ chèn một dòng mới giữa các yếu tố miễn phí.

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




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.