A veces, cuando hago garabatos, dibujo un rectángulo, empiezo con una diagonal desde una de las esquinas y luego trazo una línea "reflejándola" cada vez que golpeo un lado del rectángulo. Continúo con esto hasta que alcanzo otra esquina del rectángulo (y espero que la relación de aspecto de mi rectángulo no sea irracional;)). Esto es como trazar el camino de un láser que brilla en una caja. Debes producir el resultado de eso con el arte ASCII.
Como ejemplo, considere una caja de ancho 5
y alto 3
. Siempre comenzaremos en la esquina superior izquierda. El #
marca el límite de la caja. Tenga en cuenta que el ancho y la altura se refieren a las dimensiones internas.
####### ####### ####### ####### ####### ####### #######
#\ # #\ # #\ \# #\ /\# #\ /\# #\/ /\# #\/\/\#
# \ # # \ /# # \ /# # \/ /# # \/ /# #/\/ /# #/\/\/#
# \ # # \/ # # \/ # # /\/ # #\/\/ # #\/\/ # #\/\/\#
####### ####### ####### ####### ####### ####### #######
El reto
Dado el ancho y la altura (positivos) de la caja, debe producir el resultado final del trazado del láser. Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando, argumento de función y generar el resultado a través de STDOUT (o la alternativa más cercana), o mediante valores o argumentos de retorno de función.
Puede usar cualquier formato conveniente de lista, cadena o número para la entrada. El resultado debe ser una sola cadena (a menos que lo imprima en STDOUT, lo que, por supuesto, puede hacer gradualmente). Esto también significa que puede tomar el alto primero y el ancho segundo, solo especifique el formato de entrada exacto en su respuesta.
No debe haber espacios en blanco iniciales ni finales en ninguna línea de la salida. Opcionalmente, puede generar una nueva línea final.
Debe utilizar el espacio, /
, \
y #
y reproducir los casos de prueba exactamente como se muestra.
Casos de prueba
2 2
####
#\ #
# \#
####
3 2
#####
#\/\#
#/\/#
#####
6 3
########
#\ /#
# \ / #
# \/ #
########
7 1
#########
#\/\/\/\#
#########
1 3
###
#\#
#/#
#\#
###
7 5
#########
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#########
22 6
########################
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
# /\ /\ /\ /\ /\ /#
#/ \/ \/ \/ \/ \/ #
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
########################
X
serían necesarios para los cruces. Quizás la próxima vez. ;)Respuestas:
Pyth,
434139 bytesPruébelo en línea: Pyth Compiler / Executor . Ingrese los números en el siguiente orden: altura primera línea, ancho segunda línea.
Gracias a Isaac, que ayudó a salvar dos bytes.
Explicación:
Mi solución no rastrea el láser, usa un patrón simple que incluye el mcd. Si
m, n
son las dimensiones de la caja, dejad = gcd(m, n)
. El tamaño del patrón es exactamente2*d x 2*d
.Por ejemplo, el patrón repetitivo para
7 5
es
(
gcd(7, 5) = 1
, el tamaño del patrón es2 x 2
)Y el patrón repetitivo para
22 6
es
(
gcd(22, 6) = 2
, el tamaño del patrón es4 x 4
)Mi solución hace lo siguiente para cada una de las líneas: simplemente genera una línea del patrón, la repite varias veces y la corta al final para que quepa en la caja.
fuente
X
soportes "asignación" para cuerdas, se puede cambiarm\
a*d
y retirars
.*\
lugar de enm\
breve, pero lo descarté porque tiene el mismo tamaño. No pensé en la variabled
y lo innecesarios
.C, 256 bytes
Probablemente pueda obtener esto por debajo de 200, y agregaré una explicación más tarde, pero es posible que tenga que entregar un documento en unas pocas horas.
fuente
J, 85 bytes
Dejar
g = gcd(w,h)
. La función llena los elementos de unaw/g by h/g
matriz cong by g
mosaicos, que tienen/
'sy\
' en su diagonal y anti-diagonal. La matriz 4D resultante se desgarra en una 2D (el interior de la caja) y luego se rodea con#
's. (Los números0 1 2 3
se usan en lugar de[space] / \ #
y los números se cambian a caracteres al final).Un cálculo directo basado en la posición de la coordenada interna podría producir una solución un poco más corta.
Uso:
Pruébelo en línea aquí.
fuente
Calculadora Desmos - No compite para ayudar a un mayor conocimiento
Pruébalo en línea!
Entradas:
Intermedios:
Fórmula, abreviada:
Salidas:
Cómo funciona:
El programa no cumple con el criterio final: generar el arte ASCII de recuadro y líneas, por lo que estoy enviando información no competitiva para ayudar a otros a completar el desafío. Tenga en cuenta que para que Desmos funcione cuando c = 0 o c = b, se introdujo un pequeño factor de compensación de 0.01, ya que Desmos parece tener límites de Mod (A, B) de (0, B) en lugar de [0, B )
fuente