En la cárcel ahora

18

Desafío

Dado un número entero n(donde 4<=n<=10**6) como entrada, cree una "puerta de prisión" de arte ASCII * que mida n-1caracteres anchos y naltos, utilizando los símbolos del ejemplo a continuación.


Ejemplo

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

Los caracteres utilizados son los siguientes:

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

Reglas

  • Usted puede tomar la entrada por cualquier medio razonable, conveniente, siempre y cuando se permita la normativa de E / S estándar .
  • Para los propósitos de este desafío, en los idiomas donde los símbolos utilizados para construir la "puerta" son caracteres de varios bytes, se pueden contar para su puntaje como un solo byte cada uno.
  • Todos los demás caracteres (de uno o varios bytes) deben contarse como normales.
  • La salida puede no contener espacios finales, pero se permite una nueva línea final si es absolutamente necesario.
  • Este es el por lo que gana el conteo de bytes más bajo.

Casos de prueba

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

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

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

* Sí, soy consciente de que cuanto más grande se hace, ¡menos parece una puerta de prisión! :RE

Lanudo
fuente
44
Esto hubiera sido bueno si pudieras ingresar las dimensiones xey
Beta Decay
15
Estuvo en el Sandbox más que suficiente para sugerir eso.
Shaggy
¿Puede mi programa contener aunque el canal no esté en su página de códigos? Si no es así, ¿está "'Z“ζpermitido como costo de un byte (o 2)? (empuje 9580, convertir a unicode)?
dzaima
@dzaima Para los propósitos de este desafío, en los idiomas en los que los símbolos utilizados para la "puerta" toman varios bytes, se pueden contar para su puntaje como un solo byte cada uno.
Okx
@Okx `╬` - no representable en ninguna cantidad de bytes, "'Z“ζigualar un byte sería como en javascript que "╬"cuesta 1 byte
dzaima

Respuestas:

9

8 java, 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 creando un puerto de respuesta @raznagul C # (.NET Core) , después de jugar golf 5 bytes.

Pruébalo en línea.

Vieja respuesta de 148 bytes:

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 gracias a @raznagul .

Explicación:

Pruébalo aquí

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
fuente
¿Se pueden guardar bytes con códigos escape / char en lugar de codificarlos?
TheLethalCoder
@TheLethalCoder Quizás, pero desde el estado de la regla de desafío podemos contar los símbolos como 1 byte cada uno, probablemente sea más corto de esta manera (de ahí el conteo de 156 bytes en lugar del 176 real). Pero siéntase libre de probar algunas cosas para hacerlo más corto con los códigos de caracteres.
Kevin Cruijssen
Ah, me perdí esa parte de las reglas.
TheLethalCoder
2
+1 para el -->operador va a ( ).
raznagul
1
Si usa i-->3, i-->2y j-->3´ you can save 5 bytes by removing the n- = 3` y n+1.
raznagul
7

Carbón , 34 - 5 = 29 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. La reducción de 5 bytes es para los caracteres de dibujo de caja.

ReflectOverlapOverlap(0)debería ser equivalente a, ReflectMirror()pero en su lugar, el carbón solo hace un ReflectTransform()cambio, de lo contrario esta solución también funcionaría n=3. Aquí hay una solución alternativa que muestra lo que sucedería n=3para 38 - 5 = 33 bytes:

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

Mejor aún, si ReflectOverlapOverlap(0)funcionó, pero no me molesté en apoyar n=3, entonces podría hacer esto por 31-4 = 27 bytes:

A⁻N³γUB╬↓×╠γ╚×╩γ‖BOγ‖BO↑⁻γ¹
Neil
fuente
1
Hmm, no sabía de carbón también refleja los espejos / a y tales. " El contador de bytes del carbón no funciona por alguna razón " . ¿Quizás el contador de bytes del carbón no funciona porque esos caracteres no forman parte de su página de códigos? Sin embargo, puede contarlos como 1 byte cada uno de acuerdo con las reglas de desafío, por lo que este es de hecho 27.
Kevin Cruijssen
@KevinCruijssen Depende del operador que utilice. (Tengo que volver y verificar dos veces cada vez; hay varios y se vuelve confuso ...)
Neil
@Neil Oops, eso es un error, lo arreglará lo antes posible. Gracias por encontrarlo!
Solo ASCII
@Neil También, por alguna razón, se rompe cuando n = 4
solo ASCII
1
Continuemos esta discusión en el chat .
Solo 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","╚╩╝"]  

Pruébalo en línea!

La función wtoma un número entero iy una lista donde aestá el primero, bel segundo elemento y cel resto de la lista y crea una nueva lista a, seguida de i-3copias de b, seguida de c. Aplique wprimero en cada elemento de la lista ["╔╦╗\n","╠╬╣\n","╚╩╝"]y luego nuevamente (con un iaumento de 1) en la lista resultante. Concatenar en una sola lista.

nimi
fuente
¿Qué es el operador <$? ¿Es solo >> con los argumentos invertidos?
Aneesh Durg
@AneeshDurg: <$es originario de Data.Functory se ha incorporado Prelude. Es casi lo mismo que >>. a <$ breemplaza cada elemento bcon a, mientras que b >> aespera aser una lista y concatena la longitud de las bcopias de a. [1,2] >> "aa"-> "aaaa", "aa" <$ [1,2]-> ["aa","aa"]. Nota: 'x' <$ [1,2]igual [1,2] >> "x".
nimi
5

Vim, 29 bytes

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

Como hay caracteres de control, aquí hay un volcado 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

Pruébalo en línea! (El intérprete de V parece tener problemas con los personajes exóticos, por lo que ese enlace usa otros más mundanos).

Explicación

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
Jordán
fuente
Para confirmar: ¿es solo el intérprete de TIO el que se está ahogando con los símbolos?
Shaggy
@ Shaggy Sí, arroja un error de Python sobre Latin-1, no un error de Vim. (Utilicé la página V solo porque TIO no tiene una página Vim simple, y creo que V usa Latin-1.) Vim en mi máquina no tiene ningún problema con los caracteres.
Jordan
5

GNU sed, 74 + 1 = 75 bytes

+1 byte para -rbandera. Toma la entrada como un número unario.

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

Pruébalo en línea!

Explicación

Esto es bastante simple Supongamos que la entrada es 6 (unario 111111). La primera línea deja caer cuatro 1sy transforma la entrada restante en esto:

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

La tercera línea, en un bucle, reemplaza cada una 1con el carácter que la precede. Esto crea nuestras columnas:

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

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

...

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

Tenga en cuenta que esto también ha duplicado el ;carácter. Finalmente, la quinta línea, en un bucle, reemplaza cada ;carácter con una copia de la línea que sigue:

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

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

╔╦╦╦╗
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╠╬╬╬╣
╚╩╩╩╝
Jordán
fuente
4

Jalea , 33 bytes

... es 33? - cuesta 5 convertir de literales de cadena de un byte (índices de página de códigos) a los caracteres Unicode.

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

Un programa completo que imprime el resultado.

Pruébalo en línea!

¿Cómo?

_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
fuente
@Shaggy: estoy usando 9 bytes para representar los caracteres dentro de los literales de cadena; estos son índices de páginas de códigos. Los 5 bytes anteriores Yal final +⁽"7Ọagregan 9556 a estos y luego los convierten a caracteres. ¿Son (los 5) gratis? Siento que sería lo mismo que si pudiera usar los caracteres Unicode directamente. (También podría usar caracteres reales en lugar de índices de páginas de códigos y usar una asignación para más bytes).
Jonathan Allan
No Después de la discusión, se concluyó que solo el personaje en sí siempre se puede contar como 1, no cualquier otra representación.
Erik the Outgolfer
3

Python 3 , 75 bytes

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

Pruébalo en línea!

Monja permeable
fuente
Puede jugar un poco al golf comenzando en n-3:n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
Kevin Cruijssen
Además, n+1es equivalente a -~n.
Leaky Nun
3

Dyalog APL, 71 bytes

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

Pruébalo en línea!

Uriel
fuente
Definitivamente puedes jugar golf esto. Por ejemplo, siempre se puede reemplazar (some expr)f Ycon Y f⍨ some expr.
Adám
@ Adám Lo sé, está en progreso, no estoy en la computadora actualmente
Uriel
3

Japt , 60 52 49 48 36 bytes

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

Pruébalo en línea!

Otra versión (47 bytes + -Rbandera)

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

Necesita la -Rbandera (agregada al campo de entrada). Pruébalo en línea!

¿Como funciona?

Como originalmente asumí que los 'caracteres de puerta' cuestan más de un byte, pensé que podría ahorrar bastantes bytes codificándolos. Luego, resté 9500 de los códigos de caracteres, lo que me dejó con los caracteres 8J; DPG >MA, que solo cuestan un byte cada uno. Entonces, podría agregar 9500 a cada código de caracteres, y todo estaría bien.

 "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
fuente
Oh sí, tienes razón.
Luke
32 bytes
Shaggy
2

Rápido, 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))╝")}

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

Puedes probar esta respuesta aquí

Caleb Kleveter
fuente
2

QBIC , 78 bytes

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

Afortunadamente, todos los símbolos utilizados en la puerta de la celda están en la página de códigos QBasic.

Explicación

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

Salida de muestra

Command line: 7

╔╦╦╦╦╗
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╠╬╬╬╬╣
╚╩╩╩╩╝
Steenbergh
fuente
1
+1 por usar un idioma que realmente los tiene como caracteres de un byte en su página de códigos predeterminada.
Joshua
¿Se puede agregar un TIO (o equivalente)?
Shaggy
1
¡Oh si! ¡Lo recordaré eventualmente, lo prometo! : D
Shaggy
@ Shaggy, no te acostumbres demasiado a la idea. Acabo de encontrar un Emscripten-build de Dosbox que ejecuta QBasic. Voy a tratar de marcha que hacia QBIC en el próximo mes, por lo que un env web puede aún llegar ...
steenbergh
2

PHP , 131 bytes, 113 caracteres

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

Pruébalo en línea!

PHP , 133 bytes, 115 caracteres

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

Pruébalo en línea!

Jörg Hülsermann
fuente
2

JavaScript (ES6), 86 bytes

Esto es significativamente más largo que la otra respuesta JS , pero quería probarlo con un método alternativo.

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)

¿Cómo?

Asignamos un peso a cada borde de la cuadrícula: 1 para la derecha, 2 para la izquierda, 3 para la parte inferior y 6 para la parte superior. La suma de los pesos da el índice del personaje a usar.

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

Manifestación

Arnauld
fuente
2

JavaScript (ES6), 80 74 bytes

n=>`╔${"╦"[a="repeat"](n-=3)}╗${`
╠${"╬"[a](n)}╣`[a](n+1)}
╚${"╩"[a](n)}╝`
Luke
fuente
Puede contar los símbolos como un byte cada uno, lo que hace 80 bytes. Y debería poder hacer un mejor uso de los literales de plantilla para guardar algunos bytes;)
Shaggy
Solo puede contar los símbolos como un byte si puede encontrar una implementación de ES6 que tomará la entrada CP437 de forma nativa.
user5090812
@ user5090812, es una asignación específica para este desafío.
Shaggy
@ user5090812 No es necesario encontrar esa implementación, porque las reglas del desafío establecen " Para los propósitos de este desafío, en los idiomas en los que los símbolos utilizados para la" puerta "toman varios bytes, se pueden contar para su puntaje como un solo byte cada uno. "Así que esto tiene una cuenta de bytes de 80 bytes en lugar de 98 (si contaba correctamente).
Kevin Cruijssen
Bueno, esa es una mala regla. Elimina todos los incentivos para buscar una mejor manera de almacenar los personajes.
Luke
2

Ruby, 54 52 bytes

-2 bytes gracias a ymbirtt.

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

Pruébalo en línea!

Sin golf

Esto es súper aburrido:

->n{
   ?╔ + ?╦ * (n-=3) + "╗\n" + 
  (?╠ + ?╬ * n      + "╣\n") * -~n + 
   ?╚ + ?╩ * n      + ?╝
}
Jordán
fuente
Puede acortar (n+1)un poco escribiendo -~n: la precedencia del operador también le ahorrará los corchetes.
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)+"╝";}

Este es otro repetidor de cuerda de la misma longitud:

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

Pruébalo en línea!

Roberto Graham
fuente
No está mal, puedes hacer que tu enfoque sea aún más bajo que mi respuesta. En primer lugar, puede reducirlo a 78 + 72 bytes (150 en total) utilizando un método Java 7 en lugar de BiFunction: n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}e String r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);} Pruébelo en línea. Y el segundo método también se puede cambiar a String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}(63 bytes), por lo que se convierte en 141 bytes en total
Kevin Cruijssen
Corrección, incluso puede reducirlo a 130 bytes : n->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"y String r(String c,int n){String r=c;for(;n-->1;r+=c);return r;} probarlo en línea.
Kevin Cruijssen
2

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

Pruébalo en línea!

-5 bytes gracias a @KevinCruijssen

Explicación:

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
fuente
1
Buena respuesta, +1 de mi parte. Sé que ha pasado un tiempo, pero puedes jugar 5 bytes más cambiando b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};a for(b+="╣\n";n-->2;)a+=b;return a+c+"╝";} Probar en línea.
Kevin Cruijssen
@KevinCruijssen: Gracias.
raznagul
2

Stax , 23 bytes

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

Ejecutar y depurarlo

Aquí está la versión sin golf. Divertidamente, en realidad es más pequeño para stax no usar los caracteres literales porque incluirlos como un literal evitaría el empaquetado de origen.

"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

Ejecute este

recursivo
fuente
1

Mathematica, 106 bytes

(T[a_,b_,c_]:=a<>Table[b,#-3]<>c;w=Column;w[{T["╔","╦","╗"],w@Table[T["╠","╬","╣"],#-2],T["╚","╩","╝"]}])&
J42161217
fuente
¿Podría agregar un TIO (o equivalente)?
Shaggy
1
goto sandbox.open.wolframcloud.com/app/objects pegue el código (ctrl + v), agregue [8] al final y presione shift + enter
J42161217
Parece que hay un salto de línea adicional entre cada línea, ¿estaría en lo cierto al decir que es un problema con la representación de la salida, en lugar de la salida en sí?
Shaggy
@Shaggy Wolfram Cloud muestra todos los personajes de una manera divertida y distorsionada, por lo que no es la mejor manera de presentar tales tareas. No hay líneas adicionales y todo se ve bien en Mathica. copie y pegue su caso de prueba para verificar. Lo hice y se ven idénticos
J42161217
1

ok, 38 caracteres

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

Pruébalo en línea.

k no parece querer manejar bien unicode, así que fui con oK.

zgrep
fuente
1

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

Funciona en CP437 o CP850. Se ve así en esas páginas de códigos:

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

Retina , 56 50 bytes

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

Pruébalo en línea! Funciona construyendo un cuadrado de ╬s y luego arreglando los bordes (en particular, se eliminan tres columnas cuando se agregan los lados).

Neil
fuente
1

PowerShell , 67 bytes

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

Toma entrada $args[0], resta 3, guarda eso $x, lo usa en la construcción de la parte superior de la puerta para generar la cantidad adecuada de secciones intermedias. Luego estamos generando las filas del medio, de las cuales tenemos $x+1. Finalmente, la fila inferior es similar a la fila superior. Todos estos quedan en la tubería, y lo implícito Write-Outputinserta una nueva línea entre los elementos de forma gratuita.

Pruébalo en línea!

AdmBorkBork
fuente
1

Perl 5 , 61

60 caracteres de código (90 incluidos los caracteres de puerta multibyte) + 1 para -p

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

Pruébalo en línea!

Xcali
fuente
1

C # (.NET Core), 130 bytes

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

Puerto de la respuesta Java 8 de @RobertoGraham, después de jugar al golf unos 70 bytes.

Pruébalo en línea.

Kevin Cruijssen
fuente