Dados dos enteros positivos, W y H, generan un cuadro de arte ASCII cuyo borde está hecho de barras ( /
y \
) con "puntas" W en los bordes superior e inferior, y "puntas" H en los bordes izquierdo y derecho. El interior de la caja está lleno de espacios.
Una "espiga" son simplemente dos barras que se unen para formar una flecha:
/\ \/
/ \
\ /
Entonces la salida para W = 4, H = 3
sería
/\/\/\/\
\ /
/ \
\ /
/ \
\/\/\/\/
como hay 4 picos en la parte superior apuntando hacia arriba, 4 en la parte inferior apuntando hacia abajo, 3 en la izquierda apuntando hacia la izquierda y 3 en la derecha apuntando hacia la derecha.
Aquí hay algunos otros pares de entrada / salida:
W H
[spiky slash box]
1 1
/\
\/
1 2
/\
\/
/\
\/
2 1
/\/\
\/\/
2 2
/\/\
\ /
/ \
\/\/
1 3
/\
\/
/\
\/
/\
\/
3 1
/\/\/\
\/\/\/
2 3
/\/\
\ /
/ \
\ /
/ \
\/\/
3 2
/\/\/\
\ /
/ \
\/\/\/
10 1
/\/\/\/\/\/\/\/\/\/\
\/\/\/\/\/\/\/\/\/\/
10 2
/\/\/\/\/\/\/\/\/\/\
\ /
/ \
\/\/\/\/\/\/\/\/\/\/
4 5
/\/\/\/\
\ /
/ \
\ /
/ \
\ /
/ \
\ /
/ \
\/\/\/\/
Ninguna línea en la salida debe tener espacios iniciales o finales. Opcionalmente, puede haber una nueva línea final.
El código más corto en bytes gana.
Respuestas:
Carbón de leña , 9 bytes
Pruébalo en línea!
Explicación
fuente
F²«↷P…\/N»‖M¬
(toma la entrada en orden de altura, ancho).MATL , 18 bytes
¡Pruébalo en MATL Online!
Explicación
Considere insumos
W = 4
,H = 3
. El código construye los vectores de fila[1 2 3 4 5 6 7 8]
(rango de1
a2*W
) y[1 2 3 4 5 6]
(rango de1
a2*H
). La transposición de la última y la adición a la primera con la emisión da la matrizLa indexación modular en la cadena
\/
produce el resultado deseado en el borde de la matriz:Para eliminar los valores que no son de borde, los configuramos en
0
(cuando se interpreta como char, se muestra como espacio):Código comentado:
fuente
Python 2 ,
6968 bytes-1 gracias a Kevin Cruijssen
Pruébalo en línea!
fuente
\\%s
puede llegar a ser\%s
y\\/
puede llegar a ser\/
.Haskell ,
90888782 bytes16 bytes guardados gracias a LynnPruébalo en línea!
Todavía se siente muy largo, veré qué puedo hacer.
fuente
a#b=[a..b]
y reemplazar todas las ocurrencias ahorra un byte:a#b=[a..b];x!y|i<-2#x>>" "=(1#x>>"/\\"):(2#y>>['\\':i++"/",'/':i++"\\"])++[1#x>>"\\/"]
a#b=[1..a]>>b;x!y|i<-(x-1)#" "=x#"/\\":(y-1)#['\\':i++"/",'/':i++"\\"]++[x#"\\/"]
realidad ahorra 6 ~05AB1E , 14 bytes
Pruébalo en línea!
Explicación
Esto solo crea la esquina superior izquierda, x caracteres de ancho e y caracteres de alto. Luego refleja esto en ambos ejes:
fuente
JavaScript (ES6), 84 bytes
Toma entrada en la sintaxis de curry
(w)(h)
.Manifestación
Mostrar fragmento de código
fuente
Swift 3 , 166 bytes
Conjunto completo de pruebas.
La versión de cierre es un poco más larga, desafortunadamente (175 bytes):
Conjunto de pruebas con la versión de cierre.
fuente
Retina ,
7773 bytesPruébalo en línea! El enlace incluye casos de prueba. Toma entrada en el formato
<height> <width>
. Explicación:Convierta las entradas a unario.
Multiplique las entradas, pero agregue una nueva línea para que el resultado sea un rectángulo.
Crea la parte superior puntiaguda.
Duplique cada fila puntiaguda, pero con las puntas compensadas en la segunda fila.
Eliminar nuevas líneas finales.
Eliminar el interior de la caja. (Observe el espacio en la última línea).
fuente
Excel, 95 bytes
fuente
APL (Dyalog) ,
4139 bytesSolicita una lista de
[H,W]
Pruébalo en línea!
⎕-1
solicitud de entrada (mnemónica: consola estilizada) y resta 12×
multiplicar por dos''⍴⍨
use eso para remodelar una cadena vacía (almohadillas con espacios)⊢
rendimiento que (sirve para separarlo de4
){
…}⍣4
Aplica la siguiente función cuatro veces:≢⍵
cuenta (longitud de) el argumento'/\'⍴⍨
cíclicamente r eshape"/\"
a que la longitud⍵,
agregue eso al lado derecho del argumento⌽⍉
transposición y espejo (es decir, girar 90 °)¯1⌽1
rotar cíclicamente el 1 er fila un paso hacia la derecha⊢
rendimiento que (sirve para separarlo de1
)'\'@2@1
coloque una barra diagonal inversa en la 2ª posición del 1er elemento principal.fuente
C (gcc) ,
170166158155108105-3 bytes gracias a cleblanc
Pruébalo en línea!
Creo que esto se puede jugar aún más con un enfoque menos directo, veré qué puedo hacer cuando encuentre el momento.Ok, no puedo encontrar otra forma de reducir el número de bytes para ese código.
Explicación: una simple impresión de doble bucle de la caja char por char.
Al imprimir un borde: si las coordenadas xey son pares o impares, muestra un
/
, de lo contrario,\
se muestra unSi no es un borde, se muestra un carácter de espacio
fuente
puts("")
primer bucle for de esta manerax,y;f(w,h){for(y=h*=2;y--;puts(""))for(x=w*2;x--;)putchar(!x|x==w*2-1|!y|y==h-1?x&y&1|~x&~y&1?47:92:32);}
/// ,
172117bytesPor lo tanto, debido a que la salida consiste en
///
s ywhitespace
s, no debe haber presentaciones en los 2 idiomas.Ponga la entrada después del código
W,H
como número unario (se permite unario para /// , gracias a Challenger5 para sugerencia) (use*
para representar dígitos, separe con,
) formato.Pruébalo en línea! (con entrada
W=4, H=3
)fuente
Python 3 ,
8782 bytesEditar: Guardado 5 bytes gracias a @officialaimm , @ Mr.Xcoder y @tsh
Pruébalo en línea!
fuente
*(b-1)
puede ser*~-b
, por -2 bytes." "*2*~-a
? Justo"__"*~-a
.J, 48 bytes
sin golf
explicación
Pruébalo en línea!
fuente
' '(<,~<<0 _1)}'\/'{~=/&(2|i.)&+:
. Enmendar es genial aquí.'/\ '{~2(<,~<<0 _1)}2|+/&i.&+:
con algunas refactorizaciones05AB1E , 19 bytes
Pruébalo en línea!
Toma argumentos invertidos.
fuente
Haskell ,
8479 bytesPruébalo en línea! Ejemplo de uso:
3%6
produce una lista de líneas. ÚselomapM putStrLn $ 3%6
para hacer una bonita impresión de la caja.fuente
Java 8, 141 bytes
Una lambda al curry de ancho a alto a la salida.
Pruébelo en línea (no,
return t+i+o;
no fue intencional)Lambda sin golf
Esta solución es atípicamente exigente con el tamaño de entrada ya que
char
se usa para contar hasta la entrada de ancho. Afortunadamente, el algoritmo es lo suficientemente malo como para que en esos tamaños la finalización del programa probablemente ya sea un problema. Elegí usarchar
para el índice de bucle para poder reutilizarlo más tarde como un alias barato para'\n'
.fuente
SOGL V0.12 ,
222113 bytesPruébalo aquí! (espera que ambas entradas en la pila así
..
(y"
debido a que una cadena no se ha iniciado explícitamente) - se agrega la entrada de número dos veces para facilitar su uso)Explicación:
fuente
Mathematica, 87 bytes
Pruébelo en matemáticas (imprime espacios adicionales al comienzo de la mayoría de las líneas por algún motivo) o en el sandbox de Wolfram ! Toma dos enteros como entrada.
Es una solución bastante ingenua, pero todas las cosas inteligentes que probé tenían más bytes. Algo que casi funciona es
excepto que falla si cualquiera de las dimensiones es 1 (la entrada es una lista que contiene las dimensiones).
fuente
Pyth ,
40 3938 bytesEsto toma los dos enteros separados por una nueva línea.
Conjunto completo de pruebas.
fuente
Ruby ,
62 6160 bytes-1 byte gracias a Arnauld
Pruébalo en línea!
fuente
En realidad , 38 bytes
Pruébalo en línea!
fuente
J , 39 bytes
Pruébalo en línea!
Toma dos argumentos como
height
en el LHS ywidth
en el RHS.fuente
VBA (Excel), 161 bytes
fuente
Sub b
c=[2*A1]
r=[2*B1]
For i=1To r
For j=1To c
Debug.?IIf(i=1Or j=1Or i=r Or j=c,IIf((i + j)Mod 2,"\","/")," ");
Next
Debug.?
Next
End Sub
c=[2*A1]:r=[2*B1]:For i=1To r:For j=1To c:?IIf(i=1Or j=1Or i=r Or j=c,IIf((i + j)Mod 2,"\","/")," ");:Next:?:Next
R,
160 bytes152 bytesPruébalo en línea!
Gracias BLT por reducir 8 bytes.
fuente
s
función?s=
bit. Se permiten funciones anónimas.cc , 123 bytes
Está lejos de ser el más corto, pero si uno toma las dos últimas líneas y las gira en
pi/2
radianes en el sentido de las agujas del reloj hasta una posición "vertical", se parece a un tótem .Toma la entrada como dos enteros separados por espacios.
Pruébalo en línea!
fuente
Mathematica, 116 bytes
fuente
Rotate[w,Pi]
es equivalente aw~Rotate~Pi
, como eso["/\\",#]
a"/\\"~o~#
V , 18 bytes
La respuesta no requeriría el
ll
if<M-h>ollow
dejaran solo 2 columnas de caracteres :(Pruébalo en línea!
fuente
C # (.NET Core) , 188 bytes
El recuento de bytes también incluye:
Pruébalo en línea!
Comencé a dar explicaciones comando por comando, pero dejó de tener sentido a mitad de camino ... Lo esencial es hacer un cuadro lleno de púas, y luego ahuecar en el medio. Usé Linq por usar Linq, probablemente puede ser más corto usando solo iteraciones estándar.
Aquí está la explicación en el medio (primero el comando más interno):
Primero, cree filas para el cuadro completo y concatene en una sola cadena
Luego, obtenga cada carácter en una fila, y si no es el contorno del cuadro, reemplácelo con espacio, concatene nuevamente en una cadena para cada fila
Finalmente, obtenga cada fila y concatenelas junto con nuevas líneas (también incluye la generación de una colección para filas)
fuente
Perl 5 , 83 + 1 (-n) = 84 bytes
Pruébalo en línea!
fuente