Escriba un programa que ingrese las dimensiones de una pintura, el ancho de estera y el ancho del marco para un retrato enmarcado. El programa debe generar un diagrama utilizando el símbolo X
de la pintura, +
el tapete y #
el marco. Los símbolos deben estar separados por espacios. El espacio en blanco final está bien, siempre que la salida coincida visualmente con los criterios. Las entradas pueden ser 0
.
ENTRADA: 3 2 1 2 (Ancho, Altura, Ancho mate, Ancho del marco)
SALIDA:
En forma de texto:
# # # # # # # # #
# # # # # # # # #
# # + + + + + # #
# # + X X X + # #
# # + X X X + # #
# # + + + + + # #
# # # # # # # # #
# # # # # # # # #
El código ganador completa las condiciones en el menor número de bytes posible.
Respuestas:
Python 2 , 98 bytes
Pruébalo en línea!
Imprime una cuadrícula separada por espacios, siguiendo estrictamente la especificación. Me divierte que
*=
se use para convertira
yb
de números a cadenas.Python 3 puede guardar algunos bytes evitando
' '.join
, quizás más, usando cadenas f y expresiones de asignación. Gracias a Jo King por -2 bytes.Python 3 , 93 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
118 113107 bytesPruébalo en línea!
Comentado
fuente
MATL , 24 bytes
La entrada es: Altura, Ancho, Ancho mate, Ancho del marco.
Pruébalo en línea!
Explicación
fuente
Wolfram Language (Mathematica) , 142 bytes
Pruébalo en línea!
fuente
Carbón ,
484744 bytesPruébalo en línea! El enlace es a la versión detallada del código. Nota: espacio final. Editar: ahora usa el algoritmo de @ xnor. Explicación:
Ingrese el ancho y la altura y conviértalos en cadenas de
X
s.Pase sobre los caracteres
+
y#
conviértalos en cadenas de longitud proporcionadas por las dos entradas restantes. Luego pase sobre esas dos cuerdas.Prefijo y sufijo de la pintura con las cuerdas para la estera y el enmarcado.
Pase por las cadenas, tome el mínimo de los caracteres horizontales y verticales, y luego doble espacio entre las filas, imprimiendo implícitamente cada fila en su propia línea.
fuente
05AB1E (heredado) / 05AB1E
--no-lazy
,3231 bytesToma la entrada en el orden
height, width, matte, frame
. Si el orden de entrada especificado en el desafío es estricto (aún esperando en el OP para la verificación),s
se puede agregar un inicio (intercambio) para +1 byte.Se requiere el
--no-lazy
indicador del compilador Elixir en la nueva versión de 05AB1E, ya que Elixir tiene un comportamiento extraño debido a la evaluación diferida de mapas / bucles anidados ( aquí el resultado sin este indicador ).Pruébelo en línea en la versión heredada de 05AB1E.
Pruébelo en línea en la nueva versión de 05AB1E con un
--no-lazy
indicador agregado .Explicación:
fuente
Jalea , 17 bytes
Pruébalo en línea!
Argumento 1:
[Frame width, Matte width]
Argumento 2:
[Width, Height]
fuente
Lienzo , 24 bytes.
Pruébalo aquí!
Debería ser 5 bytes más corto, pero no porque Canvas tenga errores.
fuente
R , 119 bytes
Pruébalo en línea!
fuente
Python 3.8 (pre-release) ,
116115113 bytesPruébalo en línea!
Primer intento de golf, se mejorará pronto.
a
es ancho,b
alto,c
ancho mate yd
ancho de marco.-1 bytes utilizando el
:=
operador para definirh
comoe * d
-2 bytes gracias a Jo King sugiriéndome que elimine los parámetros e y f
EXPLICACIÓN:
fuente
e
tarea te ahorra dos bytes, laf
tarea no te ahorra nadae
yf
después de descubrir elg
acceso directoJavascript, 158 bytes
Probablemente se pueda recortar un poco
fuente
Perl 6 , 98 bytes
Pruébalo en línea!
Este es un puerto de la respuesta Python de xnor .
Perl 6 , 115 bytes
Pruébalo en línea!
Bloqueo de código anónimo más o menos golfizado utilizando la asignación de lista multidimensional de Perl 6. Por ejemplo,
@a[1;2] = 'X';
asignará'X'
al elemento con índice 2 de la lista con índice 1, y@a[1,2,3;3,4,5]='X'xx 9;
reemplazará todos los elementos con índices3,4,5
de las listas con índices1,2,3
con'X'
.Explicación:
En primer lugar, inicializar la lista como una
a+2*(c+d)
deb+2*(c+d)
rectángulo del#
s.Luego asignamos el rectángulo interno de
+
sFinalmente, el rectángulo más interno de
X
s.fuente
Gelatina ,
35312824 bytesPruébalo en línea!
Toma la entrada en el marco de orden, mate, ancho, alto; separado por comas. Emite la imagen de arte ASCII con marco y mate. Si el orden de entrada es estricto, necesitaría agregar más bytes (según mi publicación original).
Un par de campos de golf basados en la respuesta de @ EriktheOutgolfer; Me di cuenta de que los personajes estaban en orden ASCII, pero no había pensado en la mejor manera de aprovechar eso, y me había olvidado
G
. ¡Sin embargo, la suya sigue siendo una mejor respuesta!fuente
43134
necesitará 3 caracteres de codificación, que incluyen un carácter inicial / final para indicar que está codificado también será de 5 bytes. ¿Y Jelly quizás tenga un duplicado de algún tipo, ya que el segundo número es 100 más grande que el primero? ¿No está seguro si las acciones empujan 43134, duplican, empujan 100, más, el par es posible y más corto en Jelly?Perl 5, 115 bytes
TIO
fuente
PowerShell , 132 bytes
Pruébalo en línea!
fuente