교도소에서


18

도전

입력으로 정수 n(where 4<=n<=10**6)가 주어지면 아래 예의 기호를 사용하여 n-1폭이 넓고 n문자가 높은 ASCII 아트 "감옥 문"*을 만듭니다 .


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

사용 된 문자는 다음과 같습니다.

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

규칙

  • 표준 I / O 규칙 에서 허용하는 한 합리적이고 편리한 방법으로 입력 할 수 있습니다 .
  • 이 문제를 해결하기 위해 "문"을 작성하는 데 사용 된 기호가 멀티 바이트 문자 인 언어에서는 각각 단일 바이트로 점수를 계산할 수 있습니다.
  • 다른 모든 문자 (싱글 또는 멀티 바이트)는 정상적으로 계산해야합니다.
  • 출력에는 후행 공백이 포함될 수 없지만 반드시 필요한 경우 후행 줄 바꿈이 허용됩니다.
  • 이것은 이므로 바이트 수가 가장 적습니다.

테스트 사례

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

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

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

* 예, 커질수록 감옥 문처럼 보이지 않습니다! :디


4
x와 y를 모두 입력 할 수 있다면 좋을 것입니다
Beta Decay

15
당신이 그것을 제안 할만 큼 오래 샌드 박스에있었습니다.
얽히고 설킨

내 프로그램 이 코드 페이지에없는 여물통을 포함 할 수 있습니까 ? 그렇지 않은 경우 "'Z“ζ1 바이트 비용 (또는 2)으로 허용됩니까? (9580 푸시, 유니 코드로 변환)?
dzaima

@dzaima 이 과제의 목적을 위해, "door"에 사용 된 기호가 여러 바이트를 사용하는 언어에서는 각각 단일 바이트로 점수를 계산할 수 있습니다.
Okx

@Okx`╬`-어떤 바이트 양으로도 재설정 "'Z“ζ할 수 없으며 , 1 바이트와 같은 것은 자바 스크립트에서 "╬"1 바이트를
소비하는

답변:


9

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

내가 5 바이트를 골프 후 @raznagul C # (.NET Core) answer 포트를 생성하여 -30 바이트 .

온라인으로 사용해보십시오.

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

@raznagul 덕분에 -5 바이트 .

설명:

여기에서 시도하십시오.

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

하드 코딩 대신 이스케이프 / char 코드를 사용하여 바이트를 저장할 수 있습니까?
TheLethalCoder

@TheLethalCoder 아마도 챌린지 규칙 상태이므로 심볼을 각각 1 바이트로 계산할 수 있으므로 아마도 이보다 짧을 것입니다 (따라서 실제 176 대신 156 바이트 수). 그러나 문자 코드로 더 짧게 만들기 위해 자유롭게 시도하십시오.
Kevin Cruijssen

아 나는 규칙의 그 부분을 놓쳤다.
TheLethalCoder

2
이동 ( -->) 연산자의 경우 +1
raznagul

1
당신이 사용하는 경우 i-->3, i-->2j-->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()Charcoal 대신에 대신 해야합니다 ReflectTransform(). 그렇지 않으면이 솔루션도 작동합니다 n=3. 다음은 38-5 n=3= 33 바이트에 어떤 일이 발생하는지 보여주는 해결 방법입니다 .

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

더 나은 방법으로, ReflectOverlapOverlap(0)효과가 있었지만 지원을 귀찮게하지 않으면 31-4 n=3= 27 바이트 동안이 작업을 수행 할 수 있습니다.

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

1
흠, 차콜도 거울 을 반사 / 미러 하는 것을 몰랐다 . " Charcoal의 바이트 카운터가 어떤 이유로 작동하지 않습니다. "문자가 코드 페이지의 일부가 아니기 때문에 Charcoal의 바이트 카운터가 작동하지 않을 수 있습니까? 챌린지 규칙에 따라 각각 1 바이트로 계산할 수 있으므로 실제로 27입니다.
Kevin Cruijssen

@KevinCruijssen 사용하는 연산자에 따라 다릅니다. (매번 돌아가서 다시 확인해야합니다. 여러 개가 있으며 혼란스러워집니다 ...)
Neil

@Neil Oops는 버그입니다. 최대한 빨리 해결할 것입니다. 찾아 주셔서 감사합니다!
ASCII 전용

@Neil 또한 어떤 이유로 n = 4 일 때 깨짐
ASCII 전용



6

하스켈, 75 바이트

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

온라인으로 사용해보십시오!

함수 w는 첫 번째, 두 번째 요소 및 나머지 i목록 인 정수 와 목록을 가져 와서 새 목록을 작성 하고 그 다음에, 사본을 작성 합니다 . 목록의 각 요소마다 먼저 적용한 다음 결과 목록에서 다시 ( 씩 증가 ) 적용하십시오. 단일 목록으로 연결하십시오.abcai-3bcw["╔╦╗\n","╠╬╣\n","╚╩╝"]i1


<$ 연산자는 무엇입니까? 그냥 논쟁이 뒤집어 졌습니까?
Aneesh Durg 2016 년

@AneeshDurg : <$는 원래 시작 Data.Functor되었으며에 삽입되었습니다 Prelude. 와 거의 동일합니다 >>. a <$ b는 모든 요소를 b로 대체 a하지만 목록 일 b >> a것으로 예상하고 ab사본 길이를 연결 a합니다. [1,2] >> "aa"-> "aaaa", "aa" <$ [1,2]-> ["aa","aa"]. 참고 : 'x' <$ [1,2]같다 [1,2] >> "x".
nimi

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 그래, Vim 오류가 아닌 Latin-1에 대한 Python 오류가 발생합니다. (TIO에 일반 Vim 페이지가 없기 때문에 V 페이지를 사용했고 V는 Latin-1을 사용한다고 생각합니다.) 내 컴퓨터의 Vim에는 문자에 문제가 없습니다.
Jordan

5

GNU sed, 74 + 1 = 75 바이트

-r플래그의 경우 +1 바이트 단항으로 입력을받습니다.

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

온라인으로 사용해보십시오!

설명

이것은 매우 간단합니다. 입력이 6이라고 가정합니다 (단일 111111). 첫 번째 줄은 4 1초를 빼고 나머지 입력을 다음과 같이 변환합니다.

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

루프에서 세 번째 줄은 모든 1문자를 앞에 오는 문자로 바꿉니다 . 열이 생성됩니다.

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

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

...

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

이것도 ;캐릭터를 복제했습니다 . 마지막으로 루프의 다섯 번째 줄은 모든 ;문자를 다음 줄의 복사본으로 바꿉니다 .

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

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

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

4

젤리 , 33 바이트

... 33 세입니까? -1 바이트 문자열 리터럴 (코드 페이지 색인)에서 유니 코드 문자로 변환하는 데 5가 소요됩니다.

_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 바이트를 사용하고 있습니다. 이들은 코드 페이지 인덱스입니다. Y끝에 있는 5 바이트 +⁽"7Ọ는 이들에 9556을 추가 한 다음 문자로 캐스트합니다. 그들은 (5) 무료입니까? 유니 코드 문자를 직접 사용할 수있는 것과 같습니다. (코드 페이지 인덱스 대신 실제 문자를 사용하고 더 많은 바이트에 대한 매핑을 사용할 수도 있습니다).
Jonathan Allan

아니. 토론 후, char 자체 만 다른 표현이 아닌 항상 1로 계산 될 수 있다고 결론지었습니다.
Outgolfer Erik


3

Dyalog APL, 71 바이트

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

온라인으로 사용해보십시오!


당신은 확실히 이것을 골프 수 있습니다. 예 : 당신은 항상 대체 할 수 있습니다 (some expr)f YY f⍨ some expr.
Adám

@ 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입력 필드에 추가 된 플래그가 필요합니다 . 온라인으로 사용해보십시오!

어떻게 작동합니까?

원래 '도어 문자'에 1 바이트 이상의 비용이 드는 것으로 가정했기 때문에 인코딩하여 상당히 많은 바이트를 절약 할 수 있다고 생각했습니다. 그런 다음 문자 코드에서 9500을 빼면 문자가 남았습니다 8J; DPG >MA. 각 문자 는 1 바이트입니다. 그런 다음 각 문자 코드에 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.

네 맞아요
Luke



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 바이트 문자로 된 언어를 사용하는 경우 +1입니다.
Joshua

TIO (또는 이와 동등한)를 추가 할 수 있습니까?
얽히고 설킨


1
오 예! 나는 그것을 기억할 것이다. 나는 약속한다! : D
얽히고 설킨

@ 얽히고 설킨, 아이디어에 너무 익숙해지지 마십시오. QBasic을 실행하는 Dosbox의 Emscripten 빌드를 발견했습니다. 앞으로 몇 달 안에 QBIC을 향해이를 시도해 볼 것이므로 웹 환경은 아직 도착하지 못할 것입니다.
steenbergh


2

자바 스크립트 (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

자바 스크립트 (ES6), 80 74 바이트

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

심볼을 각각 1 바이트로 계산하여이 80 바이트를 만들 수 있습니다. 그리고 몇 바이트를 절약하기 위해 템플릿 리터럴을 더 잘 사용할 수 있어야합니다.)
Shaggy

CP437 입력을 기본적으로 사용하는 ES6 구현을 찾을 수있는 경우 기호를 1 바이트로만 계산할 수 있습니다.
user5090812

@ user5090812,이 과제와 관련된 수당입니다.
얽히고 설킨

@ user5090812 챌린지 규칙 에 ""도어 "에 사용 된 기호가 여러 바이트를 사용하는 언어의 언어에서 여러 바이트를 사용하는 언어로 표시 되므로 구현을 찾을 필요가 없습니다. 점수는 단일 바이트로 계산 될 수 있습니다. "그래서 이것은 98 대신 80 바이트의 바이트 수를 가지고 있습니다 (제대로 계산하면).
Kevin Cruijssen

글쎄, 그건 나쁜 규칙이다. 문자를 저장하는 더 좋은 방법을 찾기 위해 모든 인센티브를 제거합니다.
Luke

2

루비, 54 52 바이트

ymbirtt 덕분에 -2 바이트

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

온라인으로 사용해보십시오!

언 골프

이것은 매우 지루합니다.

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

당신은 단축 될 수 있습니다 (n+1)서면에 의한의 작은 -~n도 당신에게 브래킷을 절약 할 수 연산자 우선 순위를 -.
ymbirtt

2

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

온라인으로 사용해보십시오!


나쁘지 않습니다. 내 대답보다 접근 방식을 훨씬 낮출 수 있습니다. 우선 당신은 대신 자바 7 방법을 사용하여 78 + 72 바이트 (총 150)로 낮출 수 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 바이트
Kevin Cruijssen

보정, 당신도 그것을 낮출 수 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 코어) , 점수 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+"╝";}

온라인으로 사용해보십시오!

@KevinCruijssen 덕분에 -5 바이트

설명:

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 오랜 시간이 걸렸다는 것을 알고 있지만 온라인b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;}; 으로 for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";} 시도
케빈 크루이 센

@KevinCruijssen : 감사합니다.
raznagul

2

Stax , 23 바이트

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

실행 및 디버깅

ungolfed 버전은 다음과 같습니다. 실제로 문자 그대로 문자를 포함하면 소스 패킹을 방해하므로 문자 그대로 문자를 사용 하지 않는 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!



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.