Dada la entrada tilesX
y tilesY
crear un método que haría un anillo rectangular de los mosaicos.
La función debe ordenar los mosaicos en un anillo como este:
tilesX
ytilesY
siempre son valores enteros positivos, no puede ser 0tilesX
ytilesY
no siempre son iguales, valores como esperar:2x5
,6x3
etc.- No es necesario verificar la entrada no válida
- Puede usar cualquier forma de mostrar los mosaicos, incluidas las matrices 2d, el arte ASCII o el texto impreso.
- No hay una forma estricta de cómo se pasa la entrada siempre que sean dos enteros.
- No puede ser una línea, dibujar un rectángulo de tamaño
tilesX
ytilesY
píxeles no es válido - El código más corto gana
Respuestas:
Dyalog APL, 8 bytes
Este tren de funciones monádicas toma la altura y el ancho como argumentos correctos y devuelve una matriz 2D de 0 '(borde) y 1 ' s (interior). Pruébelo en TryAPL .
Cómo funciona
fuente
MATL , 10 bytes
Esto genera una matriz que contiene ceros y unos.
Pruébalo en línea!
Para la salida gráfica, agregue
1YG
al final para mostrar la matriz como una imagen ( 13 bytes ):¡Pruébalo en MATL Online! Por ejemplo,
produce
fuente
HTML / JS / CSS,
198194 bytesVersión de salida gráfica. El recuento de bytes no incluye
f=
ni los tres<input>
elementos que se utilizan solo con fines de demostración. Guardado 3 bytes gracias a @IsmaelMiguel.fuente
f=(n,m)=>{d.style.width=n*25+'px';d.style.height=m*25+'px';}
puede simplificar af=(n,m)=>with(d.style)width=n*25+'px',height=m*25+'px';
?with
sí me ahorra 3 bytes pero todavía necesito el{}
s. Por otro lado,;
es innecesario, así que también lo eliminé.MATL , 10 bytes
Los argumentos de entrada son alto y ancho como enteros. La salida es una matriz de tamaño
height x width
donde los mosaicos límite son 0 y los valores internos son 1.Pruébalo en línea!
Explicación
Misma lógica que mi otra respuesta con menos bytes.
fuente
MATLAB,
3231 bytesEsto crea una función anónima que luego se puede ejecutar como
ans([4 5])
dentro del espacio de trabajo.La entrada es
[height, width]
y la salida es una matriz con 1 en el centro y 0 para el límite.La forma en que esto funciona es una matriz de unos, se crea el tamaño de la entrada. Luego se convoluciona con una matriz de identificación de 3 x 3 con unos en la diagonal. Usamos la
same
entrada paraconv2
(acortada's'
aquí) para mantener el resultado del mismo tamaño que la entrada.Luego queremos convertir la salida a un valor binario con 0 alrededor del límite y 1 dentro. Usamos la desigualdad
>2
porque todos los píxeles de borde tendrán un resultado <3 y todos los elementos no limítrofes tendrán un resultado igual a 3.Para salida gráfica:
fuente
Jalea , 10 bytes
Devuelve una cuadrícula de 0 's (borde) y 1 ' s (interior). Pruébalo en línea!
Cómo funciona
fuente
Julia,
4634 bytesEsta es una función que acepta dos enteros y devuelve una matriz booleana bidimensional.
Construimos una matriz n × m usando una comprensión de matriz con un doble
for
bucle. Para cada índice de 1 a n y 1 a m , es decir, cada elemento de la matriz, establecemos el valor entrue
si n > i > 1 y 1 < j < m . Esto es cierto en todas partes excepto en los límites, por lo que la matriz resultante tendrátrue
s en el mediofalse
ys alrededor del borde.Ejemplos:
¡Guardado 12 bytes gracias a Dennis!
fuente
CJam, 20 bytes
La entrada debe estar en la forma
height width
, la salida es una cuadrícula ASCII que usa espacios para el centro y#
el límite.Pruébalo aquí.
Explicación
fuente
Pyke,
1615 bytesPruébalo aquí!
Explicación:
Para salida prettificada, use este código .
O 13 bytes con una máscara puesta a cero alrededor del borde (caracteres medios distintos de cero)
Pruébalo aquí!
fuente
JavaScript (ES6), 80
82 85Editar 3 bytes guardados gracias a @Neil
Editar 2 bytes guardados usando
reduce
por una vezFunción anónima que devuelve una cadena de varias líneas
Prueba
fuente
!--h|!o
ya es un número entero? De lo contrario, me gusta el uso de!o
.Ruby, 63 bytes
Función anónima, imprime en STDOUT. Frontera es
#
.fuente
JavaScript (ES6), 97 bytes
Crea un anillo de
0
s. Probablemente un enfoque terrible, pero quería evitar casos extremos.fuente
JavaScript (ES6), 77 bytes
fuente
f(4)(4)
->Array [ Array[4], Array[4], Array[4], Array[4] ]
Retina ,
4543 bytesLa entrada debe estar en la forma
height width
, la salida es una cuadrícula ASCII que se usa1
para el centro y#
el límite.Pruébalo en línea!
Explicación
Convierta cada número
N
en una cadena deN
unos (es decir, convierta la entrada en unario).Relacionar cada
1
enheight
y sustituirla porwidth
, al mismo tiempo que a juego todo lo demás y retirarlo. Hacemos esto abusando de una etapa dividida. Esto crea unaw x h
cuadrícula.Finalmente, reemplazamos cada uno
1
con uno#
que se encuentra en la primera línea, la última línea o al principio o al final de una línea.fuente
En realidad , 23 bytes
Pruébalo en línea!
Este enfoque es muy similar a mi enfoque en este desafío relacionado .
Explicación:
fuente
QBasic, 69 bytes
Toma dimensiones como
width,height
. El valor booleano de la prueba is-it-on-the-border simplemente se imprime:-1
para verdadero y0
para falso. Una ejecución de muestra se ve así:Bonus: versión gráfica, 88 bytes
Creo que esto cuenta como "no una línea". Cuando la
MOD
expresión es falsa (0),PSET
traza un píxel negro; cuando es cierto (-1),PSET
aparentemente traza un píxel blanco. Aquí17,31
, se muestra en tamaño 2x:fuente
TSQL,
10710597 bytesfuente
Unicornio ,
2623 bytes¿Porque a quién no le gustan los unicornios?
Explicación (salida del "programa de lista"):
Salida para
tilesX
= 3,tilesY
= 5:Nota: Esta versión solo funciona para
tilesX
hasta 6 ytilesY
hasta 5. Sin embargo, la pregunta no menciona qué rango debemos admitir, así que supongo que esto está bien. De lo contrario, una pequeña adición al programa produce esta alternativa, que admite un rango ligeramente mayor:Unicornio,
3027 bytesAl agregar
x0y9
, que comienza el cuadro en (0,9), el programa funciona paratilesX
hasta 9 ytilesY
hasta 9 (porque la entrada solo sube a 9).fuente
J, 16 bytes
Use la forma
$
para crear un rectángulo de todos del tamaño de las entradas, y luego use la forma complementaria de Enmendar}
para convertir el interior en ceros.Pruébalo en línea!
fuente
Perl 5 , 76 + 1 (
-a
) = 77 bytesPruébalo en línea!
fuente
Perl 5, 45 + 1 (
-p
) = 46 byteslos siguientes 45 bytes no manejan tileY = 1
Pruébalo en línea
fuente