Dada a entrada tilesX
e tilesY
crie um método que faça um anel retangular a partir dos ladrilhos.
A função deve ordenar os blocos em um anel como este:
tilesX
etilesY
sempre são valores inteiros positivos, não podem ser 0tilesX
etilesY
não são sempre iguais, esperar valores como:2x5
,6x3
etc.- A verificação de entrada inválida não é necessária
- Você pode usar qualquer maneira de exibir os blocos, incluindo matrizes 2D, arte ASCII ou texto impresso.
- Não há uma maneira estrita de como a entrada é passada, desde que sejam dois números inteiros.
- Não pode ser uma linha, desenhar um tamanho de retângulo
tilesX
etilesY
pixels não é válido - O código mais curto vence
Respostas:
Dyalog APL, 8 bytes
Esse trem monádico de função usa altura e largura como argumentos corretos e retorna uma matriz 2D de 0 's (borda) e 1 ' s (interior). Teste-o no TryAPL .
Como funciona
fonte
MATL , 10 bytes
Isso gera uma matriz contendo zeros e uns.
Experimente online!
Para saída gráfica, adicione
1YG
no final para exibir a matriz como uma imagem ( 13 bytes ):Experimente no MATL Online! Por exemplo,
produz
fonte
HTML / JS / CSS,
198194 bytesVersão de saída gráfica. A contagem de bytes não inclui
f=
nem os três<input>
elementos que são usados apenas para fins de demonstração. Economizou 3 bytes graças a @IsmaelMiguel.fonte
f=(n,m)=>{d.style.width=n*25+'px';d.style.height=m*25+'px';}
ser simplificado paraf=(n,m)=>with(d.style)width=n*25+'px',height=m*25+'px';
?with
me salva 3 bytes, mas eu ainda preciso dos{}
s. Por outro lado,;
é desnecessário, então eu também o removi.MATL , 10 bytes
Os argumentos de entrada são altura e largura como números inteiros. A saída é uma matriz de tamanho em
height x width
que os blocos de limite são 0 e os valores internos são 1.Experimente Online!
Explicação
Mesma lógica que minha outra resposta com menos bytes.
fonte
MATLAB,
3231 bytesIsso cria uma função anônima que pode ser executada como
ans([4 5])
dentro da área de trabalho.Entrada é
[height, width]
e saída é uma matriz com 1 no centro e 0 para o limite.A maneira como isso funciona é uma matriz de unidades do tamanho da entrada criada. Em seguida, convolve-se com uma matriz de identificação 3 x 3 com as da diagonal. Usamos a
same
entrada paraconv2
(reduzida's'
aqui) para manter o resultado do mesmo tamanho da entrada.Em seguida, queremos converter a saída em um valor binário com 0 ao redor do limite e 1 dentro. Usamos a desigualdade
>2
porque todos os pixels de borda terão um resultado <3 e todos os elementos não-limite terão um resultado igual a 3.Para saída gráfica:
fonte
Gelatina , 10 bytes
Retorna uma grade de 0 (borda) e 1 (interior). Experimente online!
Como funciona
fonte
Julia,
4634 bytesEsta é uma função que aceita dois números inteiros e retorna uma matriz booleana bidimensional.
Construímos uma matriz n × m usando uma compreensão de matriz com um
for
loop duplo . Para cada índice de 1 a ne 1 a m , ou seja, cada elemento da matriz, definimos o valor paratrue
se n > i > 1 e 1 < j < m . Isso é verdade em qualquer lugar, exceto nos limites, portanto a matriz resultante terátrue
s no meio efalse
s ao redor da borda.Exemplos:
Economizou 12 bytes graças a Dennis!
fonte
CJam, 20 bytes
A entrada deve estar no formato
height width
, a saída é uma grade ASCII usando espaços para o centro e#
para o limite.Teste aqui.
Explicação
fonte
Pyke,
1615 bytesExperimente aqui!
Explicação:
Para saída prettificada, use este código .
Ou 13 bytes com uma máscara zerada na borda (caracteres do meio diferentes de zero)
Experimente aqui!
fonte
JavaScript (ES6), 80
82 85Edite 3 bytes salvos thx @Neil
Edite 2 bytes salvos usando
reduce
pela primeira vezFunção anônima retornando uma sequência de linhas múltiplas
Teste
fonte
!--h|!o
já é um número inteiro? Caso contrário, eu gosto do uso de!o
.Ruby, 63 bytes
Função anônima, imprime em STDOUT. Border is
#
.fonte
JavaScript (ES6), 97 bytes
Cria um anel de
0
s. Provavelmente uma abordagem terrível, mas eu queria evitar casos extremos.fonte
JavaScript (ES6), 77 bytes
fonte
f(4)(4)
->Array [ Array[4], Array[4], Array[4], Array[4] ]
Retina ,
4543 bytesA entrada deve estar no formato
height width
, a saída é uma grade ASCII usada1
para o centro e#
para o limite.Experimente online!
Explicação
Converta cada número
N
em uma sequência deN
uns (por exemplo, converta a entrada em unário).Combinar cada
1
emheight
e substituí-lowidth
, ao mesmo tempo, combinando tudo e removê-lo. Fazemos isso abusando de um estágio dividido. Isso cria umaw x h
grade.Finalmente, substituímos todos
1
por um#
que seja encontrado na primeira linha, na última linha ou no início ou no final de uma linha.fonte
Na verdade , 23 bytes
Experimente online!
Essa abordagem é muito semelhante à minha abordagem neste desafio relacionado .
Explicação:
fonte
QBasic, 69 bytes
Toma dimensões como
width,height
. O valor booleano do teste is it it on the border é simplesmente impresso:-1
para true e0
para false. Uma amostra de execução é semelhante a:Bônus: Versão gráfica, 88 bytes
Eu acredito que isso conta como "não é uma linha". Quando a
MOD
expressão é falsa (0),PSET
plota um pixel preto; quando é verdade (-1),PSET
aparentemente plota um pixel branco. Aqui17,31
, mostrado em tamanho 2x:fonte
TSQL,
10710597 bytesfonte
Unicórnio ,
2623 bytesPorque quem não gosta de unicórnios ?!
Explicação (saída "list program"):
Saída para
tilesX
= 3,tilesY
= 5:Nota: Esta versão funciona apenas para
tilesX
até 6 etilesY
até 5. A questão não menciona que intervalo precisamos oferecer suporte; portanto, estou assumindo que isso está correto. Caso contrário, uma pequena adição ao programa produz essa alternativa, que suporta uma faixa um pouco maior:Unicórnio,
3027 bytesAdicionando
x0y9
, que inicia a caixa em (0,9), o programa funciona paratilesX
até 9 etilesY
até 9 (porque a entrada só sobe para 9).fonte
J, 16 bytes
Use a forma
$
para criar um retângulo com todas as dimensões do tamanho das entradas e, em seguida, use a forma complementar de Alterar}
para transformar o interior em zeros.Experimente online!
fonte
Perl 5 , 76 + 1 (
-a
) = 77 bytesExperimente online!
fonte
Perl 5, 45 + 1 (
-p
) = 46 bytes45 bytes a seguir não manipula tileY = 1
Experimente online
fonte