Dados dois inteiros positivos, W e H, produzem uma caixa de arte ASCII cuja borda é feita de barras ( /
e \
) com W "espigões" nas bordas superior e inferior e H "espigões" nas bordas esquerda e direita. O interior da caixa está cheio de espaços.
Um "pico" é simplesmente duas barras que se juntam para formar uma seta:
/\ \/
/ \
\ /
Portanto, a saída para W = 4, H = 3
seria
/\/\/\/\
\ /
/ \
\ /
/ \
\/\/\/\/
pois há 4 pontas na parte superior apontando para cima, 4 na parte inferior apontando para baixo, 3 à esquerda apontando para a esquerda e 3 à direita apontando para a direita.
Aqui estão alguns outros pares de entrada / saída:
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
/\/\/\/\
\ /
/ \
\ /
/ \
\ /
/ \
\ /
/ \
\/\/\/\/
Nenhuma linha na saída deve ter espaços à esquerda ou à direita. Opcionalmente, pode haver uma nova linha à direita.
O código mais curto em bytes vence.
Respostas:
Carvão , 9 bytes
Experimente online!
Explicação
fonte
F²«↷P…\/N»‖M¬
(recebe entrada em altura, ordem de largura).MATL , 18 bytes
Experimente no MATL Online!
Explicação
Considere entradas
W = 4
,H = 3
. O código cria os vetores de linha[1 2 3 4 5 6 7 8]
(intervalo de1
até2*W
) e[1 2 3 4 5 6]
(intervalo de1
até2*H
). Transpor o último e adicionar ao primeiro com transmissão fornece a matrizA indexação modular na string
\/
produz o resultado desejado na borda da matriz:Para remover os valores que não são de borda, os definimos como
0
(quando interpretados como char, eles são exibidos como espaço):Código comentado:
fonte
Python 2 ,
6968 bytes-1 graças a Kevin Cruijssen
Experimente online!
fonte
\\%s
pode se tornar\%s
e\\/
pode se tornar\/
.Haskell ,
90888782 bytes16 bytes economizados graças ao LynnExperimente online!
Ainda parece muito longo, vou ver o que posso fazer.
fonte
a#b=[a..b]
e substituir todas as ocorrências economiza um 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#"\\/"]
realmente salva 6 ~05AB1E , 14 bytes
Experimente online!
Explicação
Isso cria apenas o canto superior esquerdo, x caracteres de largura e y caracteres de altura. Em seguida, espelha isso nos dois eixos:
fonte
JavaScript (ES6), 84 bytes
Recebe entrada na sintaxe de currying
(w)(h)
.Demo
Mostrar snippet de código
fonte
Swift 3 , 166 bytes
Conjunto de teste completo.
Infelizmente, a versão de fechamento é um pouco mais longa (175 bytes):
Conjunto de testes com a versão de fechamento.
fonte
Retina ,
7773 bytesExperimente online! O link inclui casos de teste. Recebe entrada no formato
<height> <width>
. Explicação:Converta as entradas para unárias.
Multiplique as entradas, mas adicione uma nova linha para que o resultado seja um retângulo.
Crie o topo pontudo.
Duplique cada linha pontiaguda, mas com os pontos deslocados na segunda linha.
Exclua as novas linhas à direita.
Exclua o interior da caixa. (Anote o espaço na última linha.)
fonte
Excel, 95 bytes
fonte
APL (Dyalog) ,
4139 bytesSolicita uma lista de
[H,W]
Experimente online!
⎕-1
solicitar entrada (mnemônico: console estilizado) e subtrair 12×
multiplicar por dois''⍴⍨
use isso para remodelar uma string vazia (almofadas com espaços)⊢
rendimento que (serve para separá-lo4
){
…}⍣4
Aplique a seguinte função quatro vezes:≢⍵
registro (comprimento) do argumento'/\'⍴⍨
ciclicamente r eshape"/\"
para que o comprimento⍵,
acrescente isso ao lado direito do argumento⌽⍉
transpor e espelhar (ou seja, virar 90 °)¯1⌽1
ciclicamente girar a 1 r um passo linha à direita⊢
rendimento que (serve para separá-lo1
)'\'@2@1
colocar uma barra invertida no 2º posição do 1º item principal.fonte
C (gcc) ,
170166158155108105-3 bytes graças a cleblanc
Experimente online!
Eu acho que isso pode ser mais aprofundado com uma abordagem menos direta. Verei o que posso fazer quando encontrar o tempo.Ok, não consigo encontrar outra maneira de reduzir o número de bytes para esse código.
Explicação: um loop duplo simples imprimindo o caractere de caixa por caractere.
Ao imprimir uma borda: se as coordenadas x e y forem pares ou ímpares, ele exibirá a
/
, caso contrário, a\
será exibidoSe não for uma borda, um caractere de espaço será exibido.
fonte
puts("")
para o primeiro loop for assimx,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);}
/// ,
172117 bytesPortanto, como a saída consiste em
///
s ewhitespace
s, deve haver envios nesses 2 idiomas.Coloque a entrada após o código
W,H
como número unário (é permitido unário para /// , graças ao Challenger5 pela sugestão) (use*
para representar o dígito, separe com,
) o formato.Experimente online! (com entrada
W=4, H=3
)fonte
Python 3 ,
8782 bytesEdit: salvou 5 bytes graças a @officialaimm , @ Mr.Xcoder e @tsh
Experimente online!
fonte
*(b-1)
pode ser*~-b
, por -2 bytes." "*2*~-a
? Apenas"__"*~-a
.J, 48 bytes
destroçado
explicação
Experimente online!
fonte
' '(<,~<<0 _1)}'\/'{~=/&(2|i.)&+:
. Alterar é ótimo aqui.'/\ '{~2(<,~<<0 _1)}2|+/&i.&+:
com alguma refatoração05AB1E, 19 bytes
Try it online!
Takes arguments reversed.
fonte
Haskell,
8479 bytesTry it online! Example usage:
3%6
yields a list of lines. UsemapM putStrLn $ 3%6
to pretty-print the box.fonte
Java 8, 141 bytes
A curried lambda from width to height to output.
Try It Online (no,
return t+i+o;
was not intentional)Ungolfed lambda
This solution is atypically picky about input size since a
char
is used to count up to the width input. Fortunately, the algorithm is bad enough that at those sizes program completion is probably already an issue. I chose to usechar
for the loop index so I could reuse it later as a cheap alias for'\n'
.fonte
SOGL V0.12,
222113 bytesTry it Here! (expects both inputs on stack so
..
(and"
because a string hasn't been explicitly started) - take number input twice is added for ease-of-use)Explanation:
fonte
Mathematica, 87 bytes
Try it in Mathics (it prints extra spaces at the start of most lines for some reason), or at the Wolfram sandbox! Takes two integers as input.
It's a fairly naïve solution, but all of the clever things I tried had more bytes. Something that nearly works is
except it fails if either dimension is 1 (input is a list containing the dimensions).
fonte
Pyth,
40 3938 bytesThis takes the two integers separated by a newline.
Full test suite.
fonte
Ruby,
62 6160 bytes-1 byte thanks to Arnauld
Try it online!
fonte
Actually, 38 bytes
Try it online!
fonte
J, 39 bytes
Try it online!
Takes two arguments as
height
on the LHS andwidth
on the RHS.fonte
VBA (Excel) , 161 Bytes
fonte
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 bytesTry it online!
Thanks BLT for shaving off 8 bytes.
fonte
s
function?s=
bit. Anonymous functions are allowed.dc, 123 bytes
It's far from the shortest, but, if one takes the last two lines and rotates them
pi/2
radians clockwise to an "upright" position, it kind of looks like a totem pole.Takes input as two space-separated integers.
Try it online!
fonte
Mathematica, 116 bytes
fonte
Rotate[w,Pi]
is equivalent tow~Rotate~Pi
, as iso["/\\",#]
to"/\\"~o~#
V, 18 bytes
Answer wouldn't require the
ll
if<M-h>ollow
left 2 char columns alone :(Try it online!
fonte
C# (.NET Core), 188 bytes
Byte count also includes:
Try it online!
I started making explanation command-by-command but it stopped making sense midway... Basic gist is to make full spiky box, and then hollow out the middle. I used Linq for the sake of using Linq, probably can be shorter using just standard iterations.
Here's explanation going middle-out (the inner-most command first):
First, create rows for the full box, and concatenate to a single string
Then get each character in a row, and if it isn't the outline of the box, replace with space, concatenate them back into one string for each row
Finally, get each row and concatenate them together with newlines (also includes generating of a collection for rows)
fonte
Perl 5, 83 + 1 (-n) = 84 bytes
Try it online!
fonte