Jetzt im Gefängnis

18

Herausforderung

Mit einer Ganzzahl n(wobei 4<=n<=10**6) als Eingabe erstellen Sie eine ASCII-Kunst "Gefängnistür" *, die n-1Zeichenbreite und nZeichenhöhe anhand der Symbole aus dem folgenden Beispiel misst .


Beispiel

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

Folgende Zeichen werden verwendet:

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

Regeln

  • Sie können Eingaben auf jede vernünftige und bequeme Weise vornehmen, sofern dies nach den Standard-E / A-Regeln zulässig ist .
  • In Sprachen, in denen die für die Erstellung der "Tür" verwendeten Symbole Mehrbytezeichen sind, werden sie möglicherweise als ein Byte für Ihre Punktzahl gezählt.
  • Alle anderen Zeichen (Einzel- oder Multibyte) sollten als normal gezählt werden.
  • Die Ausgabe darf keine nachgestellten Leerzeichen enthalten, jedoch ist ein nachstehender Zeilenumbruch zulässig, wenn dies unbedingt erforderlich ist.
  • Dies ist also gewinnt die niedrigste Bytezahl.

Testfälle

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

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

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

* Ja, ich weiß, je größer es wird, desto weniger sieht es aus wie eine Gefängnistür! : D

Zottelig
quelle
4
Dies wäre gut gewesen, wenn Sie sowohl die x- als auch die y-Dimension
Beta Decay
15
Es war mehr als lang genug in der Sandbox, um Ihnen dies nahezulegen.
Shaggy
Kann mein Programm auch Talspuren enthalten , die nicht in seiner Codepage enthalten sind? Wenn nicht, dann ist "'Z“ζals ein Byte kosten (oder 2) erlaubt? (9580 drücken, in Unicode konvertieren)?
Dzaima
@dzaima Für diese Herausforderung werden in Sprachen, in denen die für die "Tür" verwendeten Symbole mehrere Bytes umfassen, sie möglicherweise als ein einzelnes Byte für Ihre Punktzahl gezählt.
Okx
@Okx `╬` - nicht in jeder Bytemenge darstellbar, "'Z“ζentspricht einem Byte wie in Javascript, "╬"kostet 1 Byte
dzaima

Antworten:

9

Java 8, 156 151 148 118 Bytes

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 Bytes durch Erstellen eines Ports mit der Antwort @raznagul C # (.NET Core) , nachdem ich 5 Bytes golfen habe.

Probieren Sie es online aus.

Alte 148-Byte-Antwort:

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 Bytes dank @raznagul .

Erläuterung:

Probieren Sie es hier aus.

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
quelle
Können Sie Bytes mit Escape- / Char-Codes speichern, anstatt sie fest zu codieren?
TheLethalCoder
@TheLethalCoder Vielleicht, aber da wir die Symbole nach der Herausforderungsregel als jeweils 1 Byte zählen können, ist sie wahrscheinlich kürzer (daher die 156-Byte-Anzahl anstelle der tatsächlichen 176). Aber probieren Sie ein paar Dinge aus, um es mit den Zeichencodes kürzer zu machen.
Kevin Cruijssen
Ah, ich habe diesen Teil der Regeln verpasst.
TheLethalCoder
2
+1 für den gehe zu ( -->) Operator.
Raznagul
1
Wenn Sie verwenden i-->3, i-->2und j-->3´ you can save 5 bytes by removing the n- = 3` und n+1.
Raznagul
7

Holzkohle , 34 - 5 = 29 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Die 5-Byte-Reduzierung gilt für Zeichen, die in Kästchen gezeichnet werden.

ReflectOverlapOverlap(0)sollte gleichbedeutend mit sein, ReflectMirror()aber stattdessen tut Charcoal einfach a ReflectTransform(), ansonsten würde diese Lösung auch für funktionieren n=3. Hier ist eine Problemumgehung, die zeigt, was n=3für 38 - 5 = 33 Bytes passieren würde :

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

Besser noch, wenn es ReflectOverlapOverlap(0)funktioniert, aber ich habe mich nicht darum gekümmert zu unterstützen n=3, dann könnte ich das für 31 - 4 = 27 Bytes machen:

A⁻N³γUB╬↓×╠γ╚×╩γ‖BOγ‖BO↑⁻γ¹
Neil
quelle
1
Hmm, wusste nicht, dass Charcoal auch Spiegel zu und so reflektiert . „Der Bytezähler von Charcoal funktioniert aus irgendeinem Grund nicht. “ Vielleicht funktioniert der Bytezähler von Charcoal nicht, weil diese Zeichen nicht Teil der Codepage sind? Sie können sie jedoch gemäß den Herausforderungsregeln jeweils als 1 Byte zählen. Das ist also in der Tat 27.
Kevin Cruijssen,
@ KevinCruijssen Es hängt davon ab, welchen Operator Sie verwenden. (Ich muss jedes Mal zurückgehen und noch einmal nachsehen; es gibt eine Reihe von ihnen und es wird verwirrend ...)
Neil
@Neil Ups, das ist ein Fehler, der so schnell wie möglich behoben wird. Danke, dass Sie es gefunden haben!
Nur ASCII
@Neil Auch aus irgendeinem Grund ist es kaputt, wenn n = 4
ASCII
1
Lassen Sie uns diese Diskussion im Chat fortsetzen .
Nur ASCII
6

Haskell, 75 Bytes

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

Probieren Sie es online!

Function verwendet weine Ganzzahl iund eine Liste, wobei aes sich um das erste, bdas zweite und cden Rest der Liste handelt, und erstellt eine neue Liste a, gefolgt von i-3Kopien von b, gefolgt von c. Wenden Sie wzuerst auf jedes Element der Liste ["╔╦╗\n","╠╬╣\n","╚╩╝"]und dann erneut (mit iErhöhung um 1) auf die resultierende Liste an. In eine einzelne Liste verketten.

nimi
quelle
Was ist der Operator <$? Ist es nur >> mit umgedrehten Argumenten?
Aneesh Durg
@AneeshDurg: <$stammt ursprünglich aus Data.Functorund wurde in Prelude. Es ist fast das gleiche wie >>. a <$ bErsetzt jedes Element bdurch a, wobei b >> aerwartet wird a, dass es eine Liste ist, und verkettet die Länge der bKopien von a. [1,2] >> "aa"-> "aaaa", "aa" <$ [1,2]-> ["aa","aa"]. Anmerkung: 'x' <$ [1,2]entspricht [1,2] >> "x".
Nimi
5

Vim, 29 Bytes

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

Da es Steuerzeichen gibt, folgt ein xxd-Dump:

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

Probieren Sie es online! (Der V-Interpreter scheint Probleme mit exotischen Zeichen zu haben, so dass für die Verknüpfung einfachere verwendet werden.)

Erläuterung

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
Jordan
quelle
Zur Bestätigung: Erstickt nur der TIO-Interpreter an den Symbolen?
Shaggy
@ Shaggy Ja, es wird ein Python-Fehler über Latin-1 ausgegeben, kein Vim-Fehler. (Ich habe die V-Seite verwendet, nur weil TIO keine einfache Vim-Seite hat, und ich denke, V verwendet Latin-1.) Vim auf meinem Computer hat keine Probleme mit den Zeichen.
Jordanien
5

GNU sed, 74 + 1 = 75 Bytes

+1 Byte für -rFlag. Nimmt die Eingabe als unäre Zahl an.

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

Probieren Sie es online!

Erläuterung

Das ist ziemlich einfach. Angenommen, die Eingabe ist 6 (unär 111111). Die erste Zeile löscht vier 1Sekunden und wandelt die verbleibende Eingabe in folgende um:

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

Die dritte Zeile in einer Schleife ersetzt jede Zeile 1durch das vorangestellte Zeichen. Dadurch werden unsere Spalten erstellt:

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

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

...

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

Beachten Sie, dass dies auch das ;Zeichen dupliziert hat . Schließlich ersetzt die fünfte Zeile in einer Schleife jedes ;Zeichen durch eine Kopie der folgenden Zeile:

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

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

╔╦╦╦╗
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝
Jordan
quelle
4

Gelee , 33 Bytes

... ist es 33? - Die Konvertierung von Ein-Byte-String-Literalen (Codepage-Indizes) in Unicode-Zeichen kostet 5 Euro.

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

Ein vollständiges Programm druckt das Ergebnis aus.

Probieren Sie es online!

Wie?

_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
quelle
@ Shaggy - Ich verwende 9 Bytes, um die Zeichen in String-Literalen darzustellen - dies sind Codepage-Indizes. Die 5 Bytes vor dem Yam Ende, +⁽"7Ọaddieren 9556 zu diesen und werden dann in Zeichen umgewandelt. Sind sie (die 5) frei? Ich glaube, das wäre das Gleiche, als könnte ich die Unicode-Zeichen direkt verwenden. (Ich könnte auch tatsächliche Zeichen anstelle von Codepage-Indizes verwenden und eine Zuordnung für mehr Bytes verwenden).
Jonathan Allan
Nee. Nach der Diskussion wurde der Schluss gezogen, dass immer nur das Zeichen selbst als 1 gezählt werden kann, keine andere Darstellung.
Erik der Outgolfer
3

Python 3 , 75 Bytes

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

Probieren Sie es online!

Undichte Nonne
quelle
Sie können leicht Golf spielen, indem Sie beginnen bei n-3:n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
Kevin Cruijssen
Auch n+1ist gleichbedeutend mit -~n.
Undichte Nonne
3

Dyalog APL, 71 Bytes

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

Probieren Sie es online!

Uriel
quelle
Sie können dieses definitiv Golf spielen. Zum Beispiel können Sie immer ersetzen (some expr)f Ymit Y f⍨ some expr.
Adám,
@ Adám Ich weiß, es ist in Bearbeitung, ich bin nicht am Computer derzeit
Uriel
3

Japt , 60 52 49 48 36 Bytes

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

Probieren Sie es online!

Eine andere Version (47 Bytes + -RFlag)

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

Benötigt das -RFlag (zum Eingabefeld hinzugefügt). Probieren Sie es online!

Wie funktioniert es?

Da ich ursprünglich davon ausgegangen war, dass die 'Türzeichen' mehr als ein Byte kosten, dachte ich, ich könnte einige Bytes einsparen, indem ich sie codiere. Dann subtrahierte ich 9500 von den Zeichencodes, was mich mit den Zeichen zurückließ 8J; DPG >MA, die jeweils nur ein Byte kosteten. Dann könnte ich jedem Zeichencode 9500 hinzufügen, und alles wäre in Ordnung.

 "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
quelle
Oh ja, du hast recht.
Luke
32 Bytes
Shaggy
2

Schnell, 161 Bytes

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

Nicht golfen:

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

Sie können diese Antwort hier ausprobieren

Caleb Kleveter
quelle
2

QBIC , 78 Bytes

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

Glücklicherweise befinden sich alle in der Tür der Zelle verwendeten Symbole auf der QBasic-Codepage.

Erläuterung

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

Beispielausgabe

Command line: 7

╔╦╦╦╦╗
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╚╩╩╩╩╝
steenbergh
quelle
1
+1 für die Verwendung einer Sprache, die sie tatsächlich als 1-Byte-Zeichen in ihrer Standard-Codepage enthält.
Joshua
Können Sie ein TIO (oder ein Äquivalent) hinzufügen?
Shaggy
1
Oh ja! Ich werde mich irgendwann daran erinnern, das verspreche ich! : D
Shaggy
@ Shaggy gut, gewöhne dich nicht zu sehr an die Idee. Ich habe gerade einen funktionierenden Emscripten-Build von Dosbox gefunden, auf dem QBasic läuft. Ich werde versuchen, dies im kommenden Monat auf QBIC auszurichten, damit möglicherweise noch ein Web-
Env
2

PHP , 131 Bytes, 113 Zeichen

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

Probieren Sie es online!

PHP , 133 Bytes, 115 Zeichen

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

Probieren Sie es online!

Jörg Hülsermann
quelle
2

JavaScript (ES6), 86 Byte

Dies ist deutlich länger als die andere Antwort von JS , aber ich wollte es mit einer alternativen Methode versuchen.

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)

Wie?

Wir weisen jeder Kante des Gitters ein Gewicht zu: 1 für rechts, 2 für links, 3 für unten und 6 für oben. Die Summe der Gewichte gibt den Index des zu verwendenden Zeichens an.

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

Demo

Arnauld
quelle
2

JavaScript (ES6), 80 bis 74 Byte

n=>`╔${"╦"[a="repeat"](n-=3)}╗${`
╠${"╬"[a](n)}╣`[a](n+1)}
╚${"╩"[a](n)}╝`
Luke
quelle
Sie können die Symbole als jeweils ein Byte zählen, was 80 Byte ergibt. Und Sie sollten in der Lage sein, Template-Literale besser zu nutzen, um ein paar Bytes zu sparen;)
Shaggy
Sie können die Symbole nur dann als ein Byte zählen, wenn Sie eine ES6-Implementierung finden, die die CP437-Eingabe nativ übernimmt.
user5090812
@ user5090812, Es handelt sich um eine Zulage, die für diese Herausforderung spezifisch ist.
Shaggy
@ user5090812 Diese Implementierung muss nicht gefunden werden, da in den Challenge-Regeln angegeben ist: " Für diese Challenge werden in Sprachen, in denen die für die" Tür "verwendeten Symbole mehrere Bytes umfassen, sie möglicherweise als einzelnes Byte für Ihre Punktzahl gezählt. Msgstr "" "Dies hat also eine Byteanzahl von 80 Bytes anstelle von 98 (wenn ich richtig gezählt habe).
Kevin Cruijssen
Nun, das ist eine schlechte Regel. Der Anreiz, nach einer besseren Möglichkeit zum Speichern der Zeichen zu suchen, entfällt.
Luke
2

Ruby, 54 52 Bytes

-2 Bytes dank ymbirtt.

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

Probieren Sie es online!

Ungolfed

Das ist super langweilig:

->n{
   ?╔ + ?╦ * (n-=3) + "╗\n" + 
  (?╠ + ?╬ * n      + "╣\n") * -~n + 
   ?╚ + ?╩ * n      + ?╝
}
Jordan
quelle
Sie können das (n+1)ein wenig verkürzen, indem Sie schreiben -~n- die Rangfolge der Operatoren erspart Ihnen auch die Klammern.
Ymbirtt
2

Java 8, 102 + 101 Bytes

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

Dies ist ein weiterer String-Repeater der gleichen Länge:

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

Probieren Sie es online!

Roberto Graham
quelle
Nicht schlecht, Sie können Ihre Annäherung noch niedriger als meine Antwort machen. Zunächst können Sie es mit einer Java 7-Methode auf 78 + 72 Bytes (insgesamt 150) senken, anstatt mit BiFunction: n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}und String r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);} Online ausprobieren. Die zweite Methode kann ebenfalls in String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}(63 Byte) geändert werden , sodass sie insgesamt 141 Byte
beträgt
Korrektur, Sie können es sogar auf 130 Bytes senken : n->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"und String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;} es online versuchen.
Kevin Cruijssen
2

C # (.NET Core) , Ergebnis 123 (141 Bytes) Ergebnis 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+"╝";}

Probieren Sie es online!

-5 Bytes dank @KevinCruijssen

Erläuterung:

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.
}
Rasnagul
quelle
1
Schöne Antwort, +1 von mir. Ich weiß , es ist eine Weile her, aber Sie können Golf 5 mehr Bytes durch Ändern b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};zu for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";} Online ausprobieren.
Kevin Cruijssen
@ KevinCruijssen: Danke.
Raznagul
2

Stax , 23 Bytes

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

Führen Sie es aus und debuggen Sie es

Hier ist die ungolfed Version. Amüsanterweise ist es für stax tatsächlich kleiner , die wörtlichen Zeichen nicht zu verwenden, da das Einschließen dieser Zeichen als wörtliches Zeichen das Packen der Quelle verhindern würde.

"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

Führen Sie dieses aus

rekursiv
quelle
1

Mathematica, 106 Bytes

(T[a_,b_,c_]:=a<>Table[b,#-3]<>c;w=Column;w[{T["╔","╦","╗"],w@Table[T["╠","╬","╣"],#-2],T["╚","╩","╝"]}])&
J42161217
quelle
Könnten Sie einen TIO (oder ein Äquivalent) hinzufügen?
Shaggy
1
goto sandbox.open.wolframcloud.com/app/objects fügen Sie den Code (Strg + v), add [8] am Ende und drücken Umschalt + Eingabe
J42161217
Es scheint einen zusätzlichen Zeilenumbruch zwischen den einzelnen Zeilen zu geben. Würde ich zu Recht sagen, dass dies ein Problem beim Rendern der Ausgabe ist und nicht bei der Ausgabe selbst?
Shaggy
@Shaggy Wolfram Cloud zeigt alle Zeichen auf eine witzig verzerrte Weise an, so dass es nicht die beste Art ist, solche Aufgaben zu präsentieren. Es gibt keine zusätzlichen Zeilen und auf mathematica sieht alles in Ordnung aus. Kopieren Sie Ihren Testfall und fügen Sie ihn ein, um ihn zu überprüfen. Ich habe es getan und sie sehen identisch aus
J42161217
1

OK, 38 Zeichen

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

Probieren Sie es online aus.

k scheint mit unicode nicht gut umgehen zu wollen, also bin ich mit ok gefahren.

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

Funktioniert in CP437 oder CP850. In diesen Codepages sieht das so aus:

@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
quelle
1

Netzhaut , 56 50 Bytes

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

Probieren Sie es online! Bilden Sie ein Quadrat mit ╬s und befestigen Sie dann die Kanten (insbesondere drei Spalten werden gelöscht, wenn die Seiten hinzugefügt werden).

Neil
quelle
1

PowerShell , 67 Byte

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

Nimmt Eingaben auf $args[0], subtrahiert 3, speichert diese in $x, verwendet diese bei der Konstruktion der Türoberseite, um die entsprechende Anzahl von Mittelteilen auszugeben. Dann geben wir die mittleren Reihen aus, von denen wir haben $x+1. Schließlich ähnelt die untere Reihe der oberen Reihe. Alle diese werden in der Pipeline belassen und implizitWrite-Output Elemente verbleiben Element fügt kostenlos eine neue Zeile zwischen die Elemente ein.

Probieren Sie es online!

AdmBorkBork
quelle
1

Perl 5 , 61

60 Zeichen Code (90 einschließlich der Multibyte-Türzeichen) + 1 für -p

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

Probieren Sie es online!

Xcali
quelle