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-1
caracteres anchos y n
altos, 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 código de golf, 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
╬
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)?"'Z“ζ
igualar un byte sería como en javascript que"╬"
cuesta 1 byteRespuestas:
8 java,
156151148118 bytes-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:
-5 bytes gracias a @raznagul .
Explicación:
Pruébalo aquí
fuente
-->
operador va a ( ).i-->3
,i-->2
yj-->3´ you can save 5 bytes by removing the
n- = 3` yn+1
.Carbón , 34 - 5 = 29 bytes
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 unReflectTransform()
cambio, de lo contrario esta solución también funcionarían=3
. Aquí hay una solución alternativa que muestra lo que sucederían=3
para 38 - 5 = 33 bytes:Mejor aún, si
ReflectOverlapOverlap(0)
funcionó, pero no me molesté en apoyarn=3
, entonces podría hacer esto por 31-4 = 27 bytes:fuente
╠
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.Carbón ,
4442 bytesTachado 44 sigue siendo regular 44
Pruébalo en línea!
fuente
Haskell, 75 bytes
Pruébalo en línea!
La función
w
toma un número enteroi
y una lista dondea
está el primero,b
el segundo elemento yc
el resto de la lista y crea una nueva listaa
, seguida dei-3
copias deb
, seguida dec
. Apliquew
primero en cada elemento de la lista["╔╦╗\n","╠╬╣\n","╚╩╝"]
y luego nuevamente (con uni
aumento de1
) en la lista resultante. Concatenar en una sola lista.fuente
<$
es originario deData.Functor
y se ha incorporadoPrelude
. Es casi lo mismo que>>
.a <$ b
reemplaza cada elementob
cona
, mientras queb >> a
esperaa
ser una lista y concatena la longitud de lasb
copias dea
.[1,2] >> "aa"
->"aaaa"
,"aa" <$ [1,2]
->["aa","aa"]
. Nota:'x' <$ [1,2]
igual[1,2] >> "x"
.Vim, 29 bytes
Como hay caracteres de control, aquí hay un volcado xxd:
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
fuente
GNU sed, 74 + 1 = 75 bytes
+1 byte para
-r
bandera. Toma la entrada como un número unario.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
1
sy transforma la entrada restante en esto:La tercera línea, en un bucle, reemplaza cada una
1
con el carácter que la precede. Esto crea nuestras columnas: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:fuente
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.
Un programa completo que imprime el resultado.
Pruébalo en línea!
¿Cómo?
fuente
Y
al 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).Python 3 , 75 bytes
Pruébalo en línea!
fuente
n-3
:n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
n+1
es equivalente a-~n
.Dyalog APL, 71 bytes
Pruébalo en línea!
fuente
(some expr)f Y
conY f⍨ some expr
.Japt ,
60 52 49 4836 bytesPruébalo en línea!
Otra versión (47 bytes +
-R
bandera)Necesita la
-R
bandera (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.fuente
05AB1E , 29 bytes
Pruébalo en línea!
fuente
Rápido, 161 bytes
Sin golf:
Puedes probar esta respuesta aquí
fuente
QBIC , 78 bytes
Afortunadamente, todos los símbolos utilizados en la puerta de la celda están en la página de códigos QBasic.
Explicación
Salida de muestra
fuente
PHP , 131 bytes, 113 caracteres
Pruébalo en línea!
PHP , 133 bytes, 115 caracteres
Pruébalo en línea!
fuente
JavaScript (ES6), 86 bytes
Esto es significativamente más largo que la otra respuesta JS , pero quería probarlo con un método alternativo.
¿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.
Manifestación
Mostrar fragmento de código
fuente
JavaScript (ES6),
8074 bytesfuente
Ruby,
5452 bytes-2 bytes gracias a ymbirtt.
Pruébalo en línea!
Sin golf
Esto es súper aburrido:
fuente
(n+1)
un poco escribiendo-~n
: la precedencia del operador también le ahorrará los corchetes.Java 8, 102 + 101 bytes
Este es otro repetidor de cuerda de la misma longitud:
Pruébalo en línea!
fuente
BiFunction
:n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}
eString 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 aString 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 totaln->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"
yString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
probarlo en línea.C # (.NET Core) ,
puntaje 123 (141 bytes)puntaje 118 (136 bytes)Pruébalo en línea!
-5 bytes gracias a @KevinCruijssen
Explicación:
fuente
b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};
afor(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}
Probar en línea.Stax , 23 bytes
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.
Ejecute este
fuente
Mathematica, 106 bytes
fuente
ok, 38 caracteres
Pruébalo en línea.
k no parece querer manejar bien unicode, así que fui con oK.
fuente
Lote, 126 bytes
Funciona en CP437 o CP850. Se ve así en esas páginas de códigos:
fuente
Retina ,
5650 bytesPrué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).
fuente
PowerShell , 67 bytes
Toma entrada
$args[0]
, resta3
, 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ícitoWrite-Output
inserta una nueva línea entre los elementos de forma gratuita.Pruébalo en línea!
fuente
Perl 5 , 61
60 caracteres de código (90 incluidos los caracteres de puerta multibyte) + 1 para
-p
Pruébalo en línea!
fuente
C # (.NET Core), 130 bytes
Puerto de la respuesta Java 8 de @RobertoGraham, después de jugar al golf unos 70 bytes.
Pruébalo en línea.
fuente
J ,
4137 bytesPruébalo en línea!
El dibujo de la caja predeterminada toma 13 bytes , desafortunadamente la mejor manera de reemplazar los caracteres que pude encontrar cuesta 28.
fuente